O controlador de aplicativo ASP.NET Core 8 MVC deve criar uma planilha do Excel com dados digitados em colunas (números, strings, datas, lógicas) a partir de seleção SQL arbitrária.
Eu tentei este código:
public async Task<IActionResult> RawData()
{
// https://blog.elmah.io/export-data-to-excel-with-asp-net-core/
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test");
using IDataReader dr = ExecuteReader("select * from foo", out IDbConnection _);
int currentRow= 1 ;
while (dr.Read())
{
for (var j = 0; j < dr.FieldCount; j++)
if (dr.GetFieldType(j) != typeof(byte[]))
worksheet.Cell(currentRow, j + 1).Value = dr.GetValue(j).ToString();
currentRow++;
}
using var stream = new MemoryStream();
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "test.xlsx");
}
Numérico, duplo, flutuante, inteiro e booleano aparecem como strings no Excel.
Removendo ToString()
usando
worksheet.Cell(currentRow, j + 1).Value = dr.GetValue(j);
gera um erro de compilação.
Como obter dados digitados IDataReader
em um arquivo Excel ou ODS?
O aplicativo usa o Entity Framework Core. Talvez o datareader possa ser substituído por Database.FromSQLRawAsync()
um dynamic usado.
ClosedXML
requerXLCellValue
para valores de células. Existe um método de fábrica que cria apropriadosXLCellValue
a partir deobject