У меня возникают проблемы, когда мои данные содержат значение delmiter, что ячейки будут заполнены не в том месте.
Я экспортирую и импортирую данные Excel из моего приложения. Ниже приведен рабочий фрагмент моего экспорта. Я установил свой разделитель на ';' но это вызывает проблемы, если какое-либо из моих значений свойств содержит этот символ. Поэтому мне интересно, есть ли лучший способ загрузки данных, который позволил бы мне использовать значение разделителя внутри ячеек.
public void Export()
{
using (ExcelPackage excel = new ExcelPackage())
{
excel.Workbook.Worksheets.Add("Worksheet1");
var headerRow = new List<string[]>()
{
new string[] { "Id", "FirstName", "LastName", }
};
// Determine the header range (e.g. A1:D1)
string headerRange = "A1:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "1";
var worksheet = excel.Workbook.Worksheets["Worksheet1"];
worksheet.Cells[headerRange].LoadFromArrays(headerRow);
worksheet.DefaultColWidth = 20.0;
//TODO examine delimiter
var counter = 2;
var format = new OfficeOpenXml.ExcelTextFormat();
format.Delimiter = ';';
//format.TextQualifier = '"';
format.DataTypes = new[] { eDataTypes.String };
foreach (Attendee item in context.Attendees.Include(attendee => attendee.Tags))
{
worksheet.Cells[counter++, 1].LoadFromText($"{item.Id};{item.FirstName};{item.LastName}", format);
}
//Create the response
Response.Clear();
Response.ContentEncoding = Encoding.UTF8;
Response.HeaderEncoding = Encoding.UTF8;
Response.Charset = Encoding.UTF8.WebName;
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=people.xlsx");
Response.BinaryWrite(excel.GetAsByteArray());
Response.Flush();
Response.End();
}
}
Это работает, но если какое-либо из моих полей содержит ';' У меня будут проблемы. Есть ли какое-то архаичное значение разделителя, которое я могу использовать или, возможно, более безопасный способ загрузки моих данных? Я мог бы, вероятно, написать два вложенных цикла for и ячейку загрузки вызова на каждую ячейку, но это было бы довольно уродливо, так как в моем реальном коде есть около 15 столбцов / полей. Я также не могу загрузить из коллекции, так как есть некоторые поля, которые я не хочу показывать, и они оказываются в неправильном порядке.