【问题标题】:ClosedXml doesn't copy spreadsheet's printer settingsClosedXml 不复制电子表格的打印机设置
【发布时间】:2013-11-20 00:37:54
【问题描述】:

我有 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);

【问题讨论】:

  • 好像是特定模板的问题。

标签: c# excel printing closedxml


【解决方案1】:

您可以检查/设置此选项

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

(见Documentation。)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多