0

我正在尝试使用 ExcelPackage () 使用 c# 生成一个带有 UTF8 编码的 csv。Excel 将文件标识为 .xlsx 而不是 UTF8。我的代码:

using (ExcelPackage package = new ExcelPackage())
{
    ExcelWorksheet ws = package.Workbook.Worksheets.Add("myName");
    int y = 1;
    foreach (IDictionary<string, string> elemento in losDatos)
    {
        ws.Cells["A" + y].Value = "+ Disposición de contacto";
        ws.Cells["B" + y].Value = "Llamada detallada";
        ...
        ...
        ws.Cells["AL" + y].Value = "1";
        y++;
    }

    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", "attachment;filename=myName" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".csv");
    Response.BinaryWrite(package.GetAsByteArray());
    Response.End();
}

我尝试了一些更改,仅在响应部分中,现在 csv 认出了我,但字符是陌生人:

    Response.Clear();
    Response.ContentType = "application/csv";
    Response.AddHeader("Content-Disposition", "attachment;filename=myName" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".csv");
    Response.BinaryWrite(Encoding.UTF8.GetPreamble());
    Response.BinaryWrite(package.GetAsByteArray());
    Response.End();
4

1 回答 1

0

代替

Response.ContentType = "application/csv";
Response.AddHeader("Content-Disposition", "attachment;filename=myName" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".csv");
Response.BinaryWrite(Encoding.UTF8.GetPreamble());

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment;filename=myName" + DateTime.Now.ToString("yyyyMMdd_HHmm") + ".xlsx");

你就完成了。

如果您想要 CSV,请使用不同的包,但请考虑将字符集添加到 Content-Type 标头。如果 Open XML 不是您的菜,那么 OpenDocument 电子表格(.odt,LibreOffice)将同样优于 CSV。

于 2019-10-07T22:18:15.893 回答