c# - open - epplus read excel
Escribiendo un archivo de Excel en EPPlus (3)
¿Has mirado las muestras provistas con EPPlus?
Éste le muestra cómo crear un archivo http://epplus.codeplex.com/wikipage?title=ContentSheetExample
Este le muestra cómo usarlo para retransmitir un archivo http://epplus.codeplex.com/wikipage?title=WebapplicationExample
Así es como usamos el paquete para generar un archivo.
var newFile = new FileInfo(ExportFileName);
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
// do work here
xlPackage.Save();
}
He estado estancado en esto durante días y, a pesar de toda la ayuda, ninguna de estas soluciones ha funcionado para mí. Lo que quiero hacer es crear un archivo de Excel utilizando la biblioteca de EPPlus con algunos datos básicos que extraigo de un procedimiento almacenado. Este es el código que tengo en mi archivo ExportDocument.cs:
public static ExcelPackage CreateExcelDocument(int [] arr)
{
String path = @"D:/temp/testsheet3.xlsx";
//FileInfo newFile = null;
/*if (!File.Exists(path + "//testsheet2.xlsx"))
newFile = new FileInfo(path + "//testsheet2.xlsx");
else
return newFile;*/
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add("testsheet");
ws.Cells["B1"].Value = "Number of Used Agencies";
ws.Cells["C1"].Value = "Active Agencies";
ws.Cells["D1"].Value = "Inactive Agencies";
ws.Cells["E1"].Value = "Total Hours Volunteered";
ws.Cells["B1:E1"].Style.Font.Bold = true;
int x = 2;
char pos = ''B'';
foreach (object o in arr)
{
String str = pos + x.ToString();
ws.Cells[str].Value = o.ToString();
if (pos > ''E'')
{
pos = ''B'';
x++;
}
pos++;
}
package.Save();
return package;
}
}
Todos los códigos comentados son cosas diferentes que he encontrado en Internet para probar. Tenga en cuenta que esta es una organización escolar y no estamos usando MVC. Luego estoy usando el código detrás del archivo para extraer este método de la siguiente manera:
protected void GenerateReport(Object o, EventArgs e)
{
Session["reportSession"] = ddReport.SelectedItem.Value.ToString();
int [] arr = new int [ReportRepository.GetAgencyCounts().Count];
ReportRepository.GetAgencyCounts().CopyTo(arr, 0);
ExcelPackage pck = ExportDocument.CreateExcelDocument(arr);
/*try
{
byte [] data = ExportDocument.CreateExcelDocument(arr).GetAsByteArray();
Response.Clear();
Response.Buffer = true;
Response.BinaryWrite(data);
Response.AddHeader("content-length", data.Length.ToString());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.Flush();
Response.Close();
Response.End();
}
catch (Exception ex) { }*/
/*var stream = new MemoryStream();
pck.SaveAs(stream);
String filename = "myfile.xlsx";
String contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var cd = new System.Net.Mime.ContentDisposition
{
Inline = false,
FileName = filename
};
Response.AppendHeader("Content-Disposition", cd.ToString());
stream.Position = 0;
return File(stream, contentType, filename);*/
/*Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.TransmitFile(Path.GetFullPath(file.Name));
Response.Flush();
Response.Close();*/
/*Response.ClearHeaders();
Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Sample2.xlsx");
Response.Flush();
Response.Close();*/
}
De nuevo, tenga en cuenta que todo el código comentado es cosas que he encontrado de varias fuentes que no han funcionado.
Por lo tanto, no recibo ningún error, pero cuando hago clic en el botón de mi aplicación para ejecutar el código detrás del método, no sucede nada. Se está cargando y se ejecuta, pero no se crean archivos, no se abre nada. Esta es la primera vez que uso EPPlus y no estoy completamente familiarizado con la exportación de cosas para sobresalir programáticamente, por lo que me siento perdido aquí.
¿Hay alguna sugerencia que ustedes tengan? Estaré encantado de aclarar cualquier punto que no haya abordado completamente también.
Es mejor si trabajó con DataSet
y / o DataTable
. Una vez que tenga eso, idealmente directamente de su procedimiento almacenado con nombres de columna adecuados para los encabezados, puede usar el siguiente método:
ws.Cells.LoadFromDataTable(<DATATABLE HERE>, true, OfficeOpenXml.Table.TableStyles.Light8);
.. que producirá una hermosa hoja de cálculo con una mesa bonita!
Ahora para servir su archivo, asumiendo que tiene un objeto ExcelPackage
como en su código anterior llamado pck
..
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment;filename=" + sFilename);
Response.BinaryWrite(pck.GetAsByteArray());
Response.End();
Si tiene una colección de objetos que carga utilizando un procedimiento almacenado, también puede usar LoadFromCollection
.
using (ExcelPackage package = new ExcelPackage(file))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test");
worksheet.Cells["A1"].LoadFromCollection(myColl, true, OfficeOpenXml.Table.TableStyles.Medium1);
package.Save();
}