En este artículo voy a tratar de explicar cómo utilizar la biblioteca ExcelDataReader para la conversión simple de archivos, en particular Excel para CSV. Convierta fácilmente sus archivos Excel 97-2003 (.xls) o 2007 (.xlsx) en archivos simples de valores separados por comas (.csv).
Dado que CSV es un archivo de flujo simple, es más fácil tratar con los datos del archivo. Recuerda que los datos CSV también se pueden ver como una hoja de Excel.
Bueno, manos a la obra...
El objetivo concreto es leer los datos de un archivo Excel en el programa y convertirlo en un formato fácil de operar que es CSV; utilizando la librería ExcelDataReader. Todo esto en .NET para este caso. ( creo que pronto publico una versión Java correspondiente ).
Primer paso es agregar las referencias de la biblioteca ExcelDataReader a su proyecto ( Buscar en Nuget ExcelDataReader )
Aqui te dejo el video con la implementacion del código
De cualquier manera tambien te pongo aquí la implementación del código.
private void ExcelToCsv()
{
try
{
// crear el stream del archivo xlxs o xls existente
FileStream stream = File.Open("C:\\HistoricoChat.xlsx", FileMode.Open, FileAccess.Read);
// Reading from a binary Excel file ('97-2003 format; *.xls)
// IExcelDataReader excelReaderXls = ExcelReaderFactory.CreateBinaryReader(stream);
// Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReaderXlsx = ExcelReaderFactory.CreateOpenXmlReader(stream);
string csvData = string.Format("{0},{1},{2},{3},{4}", "N. PROVEEDOR", "NOMBRE PROVEEDOR", "FECHA", "MOTIVO DE AYUDA", "DURACION CHAT");
int row = 0;
while (excelReaderXlsx.Read())
{
if (row > 0)
csvData += string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\"",
excelReaderXlsx.GetValue(0), // proveedor id
excelReaderXlsx.GetString(1), // proveedor
excelReaderXlsx.GetString(2), // fecha
excelReaderXlsx.GetString(3), // motivo de ayuda
excelReaderXlsx.GetString(4)); // duracion chat
csvData += "\n";
row++;
}
// Free resources (IExcelDataReader is IDisposable)
excelReaderXlsx.Close();
// define tu propia salida de archivo csv ( en este caso lo mandé a mi unidad extraible )
string output = "D:\\HistoricoChat.csv";
StreamWriter csv = new StreamWriter(@output, false);
csv.Write(csvData);
csv.Close();
}
catch (Exception ex)
{
var exx = ex;
}
}