我有xltx Excel的模板,当我从中创建(手动)新文档并在Excel中单击File
-> Print
时,第一张工作表适合一页。
比我在ClosedXml
的帮助下从我的模板创建新文档:
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)
,则生成的文档将具有相同的页面设置。尽管如此,当我打开 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)
(请参阅文档。
是的,ClosedXml 在执行 CopyTo 时会丢失这些设置。一种特殊情况是,当 PagesTall 设置为空时,它必须在工作表副本上显式设置为 -1,否则 ClosedXml 会将其设置为 1。