EPPlus не соблюдает ExcelHor HorizontalAlignment Center или право
Я пробовал это в EPPlus версии 3.1.3.0 и последней версии 4.0.4.0, и оба демонстрируют одинаковое поведение.
Я пытаюсь центрировать текст в ячейках, но он просто не работает. Числа в ячейках работают нормально, строки - нет. Ниже приведен пример кода, который не может произвести желаемое ExcelHorizontAlignment:
var newFile = new FileInfo(@"C:\Temp\sample.xlsx");
using (var package = new ExcelPackage(newFile))
{
var workSheet = package.Workbook.Worksheets.Add("Content");
workSheet.Column(1).Width = 50;
workSheet.Cells["A1"].Value = "This should be left-aligned";
workSheet.Cells["A1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
workSheet.Cells["A2"].Value = "This should be center-aligned";
workSheet.Cells["A2"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; // <- This doesn't work.
workSheet.Cells["A3"].RichText.Add("This should be center-aligned");
workSheet.Cells["A3"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; // <- This doesn't work.
workSheet.Cells["A4"].Value = "This should be right-aligned";
workSheet.Cells["A4"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; // <- This doesn't work.
workSheet.Cells["A5"].RichText.Add("This should be right-aligned");
workSheet.Cells["A5"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; // <- This doesn't work.
//workSheet.Cells["A2:A3"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; // <- This doesn't work.
//workSheet.Cells["A4:A5"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; // <- This doesn't work.
package.Save();
}
Это сводит меня с ума. Любые идеи, почему строки не могут быть выровнены?
1 ответ
Кажется, что LibreOffice частично виноват. Если я создаю файл с помощью EPPlus и открываю его в Calc, выравнивание по центру и правому краю не отображается. Если я затем открою файл в EPPlus, форматирование будет общим.
Однако, если я сгенерирую файл с использованием EPPlus и сразу же прочитаю его в EPPlus, выравнивание будет таким, как указано.
У меня есть решение, которое работает в Calc и Excel. Если я создаю NamedStyle и применяю его к ячейкам или диапазонам ячеек, все работает как положено.
var newFile = new FileInfo(filePath);
using (var package = new ExcelPackage(newFile))
{
var workSheet = package.Workbook.Worksheets.Add("Content");
workSheet.Column(1).Width = 50;
workSheet.Cells["A1"].Value = "This should be left-aligned";
workSheet.Cells["A1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
var centerStyle = package.Workbook.Styles.CreateNamedStyle("Center");
centerStyle.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
workSheet.Cells["A2"].Value = "This should be center-aligned";
workSheet.Cells["A3"].RichText.Add("This should be center-aligned");
workSheet.Cells["A2:A3"].StyleName = "Center";
var rightStyle = package.Workbook.Styles.CreateNamedStyle("Right");
rightStyle.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
workSheet.Cells["A4"].Value = "This should be right-aligned";
workSheet.Cells["A5"].RichText.Add("This should be right-aligned");
workSheet.Cells["A4:A5"].StyleName = "Right";
package.Save();
}