【问题标题】:How to add horizontal page break in interop excel worksheet如何在互操作 Excel 工作表中添加水平分页符
【发布时间】:2019-07-08 07:35:40
【问题描述】:

我正在尝试在 interop excel 文件中添加分页符,但还不能这样做。有时什么也没有发生,有时我得到异常“无法设置 Range 类的 PageBreak 属性”。

这是模板文件。

Excel Template file

我是 Interop Excel 的新手。我正在使用一个 Excel 文件作为 PageBreakPreview 中的模板。当我在新行中插入数据时,我想在该行之后移动分页符。 我看到了很多建议的答案,但无法完成。

这是我尝试过的一些代码(已添加)。

object misValue = System.Reflection.Missing.Value;
Excel.Application xlApp = new Excel.Application();

Excel.Workbook xlWorkBook = null;
Excel.Worksheet worksheet = null;
try
{
    xlWorkBook = xlApp.Workbooks.Open(Server.MapPath("~//Templates//ExcelTemplate.xlsx")
        , 0, true, misValue, misValue, misValue, misValue, Excel.XlPlatform.xlWindows, misValue, misValue, true, misValue, misValue, misValue, misValue);
    worksheet = (Excel.Worksheet)xlWorkBook.Worksheets[1];
    worksheet.Activate();
    worksheet.Cells[6, 1] = "Item1";
    worksheet.Cells[6, 1].Font.Bold = true;
    worksheet.Cells[7, 1] = "content";
    //worksheet.HPageBreaks.Add(sheet.Range["A7"]);
    //worksheet.HPageBreaks.Add(sheet.Range["A13"]);
    //xlWorkBook.Worksheets[0].ViewMode = ViewMode.Preview;
    //worksheet.Rows[5].PageBreak = xlPageBreakManual;
    //xlApp.ActiveWindow.View = Excel.XlWindowView.xlNormalView;
    //worksheet.Cells.PageBreak = (int)Excel.XlPageBreak.xlPageBreakNone;
    //worksheet.Rows[4].PageBreak = Excel.XlPageBreak.xlPageBreakNone;
    //worksheet.Rows[8].PageBreak = Excel.XlPageBreak.xlPageBreakManual;
    //worksheet.ResetAllPageBreaks();
    //worksheet.HPageBreaks[1].Location = worksheet.Range["A8"];
    xlWorkBook.SaveAs(Server.MapPath("~//TempFiles//ExcelFile_Copy.xlsx"));
}
catch (Exception ex)
{
    //ex
}
finally
{
    xlWorkBook.Close(0);
    xlApp.Quit();

    Marshal.ReleaseComObject(worksheet);
    Marshal.ReleaseComObject(xlWorkBook);
    Marshal.ReleaseComObject(xlApp);
}

添加新数据时,分页符应该到达下一行的末尾。

非常感谢任何帮助。

【问题讨论】:

    标签: c# asp.net excel-interop


    【解决方案1】:

    将 Excel 工作表拆分为多页,并将查看模式设置为分页预览。

    workbook.Worksheets[0].HPageBreaks.Add(sheet.Range["A7"]);
    workbook.Worksheets[0].HPageBreaks.Add(sheet.Range["A13"]);
    workbook.Worksheets[0].ViewMode = ViewMode.Preview;
    

    ps : A7 和 A13 是休息区

    已编辑

    通过调用HPageBreaks.RemoveAt()方法删除指定的水平分页符。

    workbook.Worksheets.HPageBreaks.RemoveAt(7);
    

    【讨论】:

    • 感谢您的回复。我已经尝试过了。第一条语句确实是在 excel 表的白色区域添加新的分页符。但是第二行不起作用。我假设此时分页符只能添加在白色区域可能是?但我想将现有的分页符(在附图中第 7 行后以蓝线显示)移动到下一行。就像我们用鼠标将分页符拖动到下一行一样。能做到吗?
    • 所以你想让分页符移动到第 7 行之后?为什么它不起作用?我的正在工作。你错过了什么吗?
    • 我在 HPageBreaks 中找不到 RemoveAt() 定义。我正在使用 Microsoft.Office.Interop.Excel。我找到worksheet.HPageBreaks[1].Delete(); 删除分页符。我感觉在第 7 行下方的文件中(如图所示)是自动分页符,因为我将 HPageBreaks.Count 设为零。我可以添加分页符,但只有分页符显示在文件的白色区域中的文件中。可能是如果我们删除自动分页符(在图像中的第 7 行下)并在 A13 等下一行添加新的分页符。
    • 感谢您宝贵的时间。我已经通过 PrintArea 属性找到了解决方案并且它有效。 :)
    【解决方案2】:

    我发现工作表上的白色区域实际上是打印区域,所以我刚刚更新了xlWorkBook.Worksheets[1].PageSetup.PrintArea 并分配了新的打印区域值以将 PageBreak 移动到第 7 行下,我认为这是自动分页符。如果我错了,请任何人纠正我。

    这是我为解决我的问题所做的:

    xlWorkBook.Worksheets[1].PageSetup.PrintArea = "$A$1:$H$20";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2015-08-29
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多