Создать .csv UTF8 с ExcelPackage () - PullRequest
       40

Создать .csv UTF8 с ExcelPackage ()

0 голосов
/ 07 октября 2019

Я пытаюсь создать CSV с кодировкой UTF8 с помощью C #, используя ExcelPackage (). 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();
}

Я перепробовал некоторые изменения, только в части Response, и теперь 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();

1 Ответ

0 голосов
/ 08 октября 2019

Замените

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 Spreadsheet (.odt, LibreOffice) будет в равной степени лучше CSV.

...