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 。