Я создаю ряд документов Excel с EPPlus, и у меня возникают некоторые трудности с форматированием.
Я использовал
xlWorkSheet.Cells.AutoFitColumns();
, и это, похоже, работает для данных, но не изменяет размер имен столбцов.Например, я открою файл и увижу, как сгруппированы имена столбцов.Я также могу нажать на границу столбца, и он будет расширять столбец больше.На самом деле я могу сделать это примерно 5 раз, прежде чем он достигнет своего максимального значения для автоматического определения размера.По сути, я хочу программно установить каждый столбец таким образом, чтобы он достиг максимума (я даже пытался применять AutoFitColumns несколько раз, однако это не имело никакого значения).
Есть ли способ сделать это?
Обратите внимание, что я не могу просто жестко кодировать ширину столбцов, так как пытаюсь повторно использовать один и тот же код для нескольких файлов.
РЕДАКТИРОВАТЬ: Вот мой обобщенный код
private void GeneralTest()
{
var ReportName = "myReport"
int ReportID = 123
var SelectedMonth = "April 2018"
var LAGroup = "all"
var fileName = $"{ReportName}_{SelectedMonth}_{LAGroup}.xlsx";
// Remove all illegal characters and replace with underscores
var[] disallowedCharacters = new[] { "/", @"\", "?", "%", "*", ":", "|", "\"", "<", ">" };
foreach (var character in disallowedCharacters)
fileName = fileName.Replace(character, "_");
var filePath = $@"c:\Test\{fileName}";
if (File.Exists(filePath))
File.Delete(filePath);
FileInfo NewFile = new FileInfo(filePath);
using (ExcelPackage MyExcel = new ExcelPackage(NewFile))
{
var myTestdt = MyGetDataFunction(ReportID, DateTime.Parse(SelectedMonth));
ExcelWorksheet xlWorkSheet;
xlWorkSheet = MyExcel.Workbook.Worksheets.Add("Template");
xlWorkSheet.Name = "Template";
xlWorkSheet.Cells("A1").LoadFromDataTable(myTestdt, true);
var formatRange = xlWorkSheet.Cells(1, 1, 1, myTestdt.Columns.Count);
formatRange.Style.Font.Bold = true;
formatRange.Style.Fill.PatternType = Style.ExcelFillStyle.Solid;
formatRange.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#CDFFCC"));
formatRange.Style.Font.Size = 10;
formatRange.Style.Font.Name = "Arial";
formatRange.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
formatRange.Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
formatRange.Style.WrapText = true;
formatRange.AutoFilter = true;
for (int index = 0; index <= myTestdt.Columns.Count - 1; index++)
{
if (myTestdt.Columns(index).DataType.Name == "DateTime")
{
formatRange = xlWorkSheet.Cells(2, index + 1, myTestdt.Rows.Count, index + 1);
formatRange.Style.Numberformat.Format = "dd/mm/yyyy";
}
}
xlWorkSheet.View.FreezePanes(2, 2);
xlWorkSheet.Cells.AutoFitColumns();
MyExcel.SaveAs(NewFile);
}
}