如何从sql select语句中获取键入的数据到Excel

问题描述 投票:0回答:1

ASP.NET Core 8 MVC 应用程序控制器应创建一个 Excel 电子表格,其中包含来自任意 SQL 选择的列(数字、字符串、日期、逻辑)中的类型数据。

我尝试了这段代码:

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");
}

数字、双精度、浮点数、整数、布尔值在 Excel 中显示为字符串。

使用

 删除 
ToString()

worksheet.Cell(currentRow, j + 1).Value = dr.GetValue(j);

抛出编译错误。

如何将

IDataReader
中输入的数据导入Excel或ods文件?

应用程序使用 Entity Framework Core。也许 datareader 可以替换为

Database.FromSQLRawAsync()
并使用动态。

asp.net-core entity-framework-core asp.net-core-mvc closedxml closedxml.report
1个回答
0
投票

ClosedXML
需要
XLCellValue
作为单元格值。有工厂方法可以从
XLCellValue
 创建适当的 
object

worksheet.Cell(currentRow, j + 1).Value = XLCellValue.FromObject(dr.GetValue(j));
© www.soinside.com 2019 - 2024. All rights reserved.