ClosedXml不会复制电子表格的打印机设置

我有xltx Excel的模板,当我从中创build(手动)新文档,然后单击File – >在Excel中Print第一张纸适合在一个页面上。

比在ClosedXml的帮助下从我的模板创build新的文档:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ClosedXML.Excel; namespace ClosedXml1 { class Program { static void Main(string[] args) { var tXltx = "t.xltx"; using (XLWorkbook workbook = new XLWorkbook(tXltx)) { using (XLWorkbook newWb = new XLWorkbook()) { foreach (XLWorksheet worksheet in workbook.Worksheets.Reverse()) { worksheet.CopyTo(newWb, worksheet.Name, 1); } newWb.SaveAs("new.xlsx"); } } } } } 

打开结果文档并打开打印对话框( File – > Print )时,第一张纸不适合放在一页上。

UPDATE1: XLWorksheet::CopyTo页面设置从原始模板复制到生成的工作簿。 所以,如果xltx模板具有页面设置FitToPages(1,1) ,生成的文档将具有相同的页面设置。 尽pipe如此,当我打开ClosedXml生成的工作表打印预览它不适合一个页面。 所以,这是问题:原始和生成的工作簿具有相同的页面设置,但生成的工作表不适合一个页面。


所以有问题

  • 原始模板需要复制哪些内容适合一个页面?
  • 有什么办法可以做到吗?

解决方法

 Excel.Application excelApp = new Excel.Application(); Workbook original = excelApp.Workbooks.Open(originalFilename); original.SaveAs(resultingFilename); excelApp.Quit(); Marshal.FinalReleaseComObject(excelApp); 

你可以检查/设置这个选项

 worksheet.PageSetup.PagesTall worksheet.PageSetup.PagesWide worksheet.PageSetup.FitToPages(1, 1) 

(请参阅文档 。)

是的,在执行CopyTo时,ClosedXml将丢失这些设置。 一个特殊情况是当PagesTall设置为空时 ,它必须在工作表副本上显式设置为-1 ,否则ClosedXml会将其设置为1