NPOI не меняет настройки печати листа

Всем доброго времени суток!

Мне необходимо сформировать отчет в виде документа Excel. Для этого решил использовать NPOI. В целом все хорошо и довольно удобно, но мне требуется вывести сгенерированный отчет на печать. При этом мне нужно, чтобы по ширине отчет вписывался в одну страницу. В примерах NPOI сказано, что для этого нужно использовать sheet.PrintSetup.FitWidth = 1;. Но это не работает для .xlsx документов. Есть ли какие еще способы это сделать?

Вот примерно так я файл генерирую:

        var workbook = new XSSFWorkbook();

        //fonts
        IFont boldFont = workbook.CreateFont();
        boldFont.IsBold = true;

        //styles
        ICellStyle styleLeftBold = workbook.CreateCellStyle();
        styleLeftBold.Alignment = HorizontalAlignment.Left;
        styleLeftBold.VerticalAlignment = VerticalAlignment.Bottom;
        styleLeftBold.SetFont(boldFont);

        ICellStyle styleRightBold = workbook.CreateCellStyle();
        styleRightBold.Alignment = HorizontalAlignment.Right;
        styleRightBold.VerticalAlignment = VerticalAlignment.Bottom;
        styleRightBold.SetFont(boldFont);
        
        ICellStyle styleCenterBold = workbook.CreateCellStyle();
        styleCenterBold.Alignment = HorizontalAlignment.Center;
        styleCenterBold.VerticalAlignment = VerticalAlignment.Bottom;
        styleCenterBold.SetFont(boldFont);

        var sheet = workbook.CreateSheet("Report");

        //should work, but not!
        sheet.PrintSetup.FitWidth = 1;

        //Title row
        
        sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 3));
        sheet.AddMergedRegion(new CellRangeAddress(0, 0, 4, 7));
        sheet.AddMergedRegion(new CellRangeAddress(0, 0, 8, 10));
        var titleRow = sheet.CreateRow(0);
        titleRow.CreateCell(0).SetCellValue("Left part of title");
        titleRow.GetCell(0).CellStyle = styleLeftBold;
        titleRow.CreateCell(4).SetCellValue("Middle part of title");
        titleRow.GetCell(4).CellStyle = styleCenterBold;
        titleRow.CreateCell(8).SetCellValue("Right part of title");
        titleRow.GetCell(8).CellStyle = styleRightBold;

        FileStream file = new FileStream(@"test.xlsx", FileMode.Create);
        workbook.Write(file);
        file.Close();

Ответы (1 шт):

Автор решения: Ivan Kozlov

Итак, я немного разобрался. NPOI имеет некоторые неочевидные, но весьма важные нюансы. Вот один из них: sheet.PrintSetup.FitWidth = 1; будет работать только в комбинации с другими свойствами:

sheet.FitToPage = true; // заставляет вписывать документ в необходимые размеры при печати
sheet.PrintSetup.FitWidth = 1; // задает размер по ширине в страницах
sheet.PrintSetup.FitHeight = 0; // задает размер по высоте в страницах. Если 0 - то значение будет "Авто" (то что мне и  нужно)
sheet.PrintSetup.PaperSize = (short)PaperSize.A4 + 1; // задает размер бумаги. Смещение на 1 из-за разной базы (0 - в С#, 1 - в Excel) 
→ Ссылка