【问题标题】:c# interop Excel - disable or remove automatic page breaksc# interop Excel - 禁用或删除自动分页符
【发布时间】:2020-02-07 16:55:47
【问题描述】:

由于我的 Excel 应用程序中只需要手动分页符,因此我正在尝试删除垂直自动分页符。我的研究提供了很多建议,但不知何故没有真正奏效。我见过像sn-ps这样的代码

sheet.VPageBreaks.Clear() 或者 sheet.VPageBreaks.RemoveAt(int)

但是没有 Clear 或 RemoveAt 方法。我猜这是来自旧版本。我看到有一个Zoom 属性,可以用来在一页上显示所有内容,但这不是我需要的。还有两个属性FitToPagesWideFitToPagesTallZoom 属性结合使用。

我尝试的最后一件事是将 PageBreak 属性设置为 sheet.Cells.PageBreak = (int)Excel.XlPageBreak.xlPageBreakManual,但这会导致异常。

无法设置范围类的分页符属性

我没有想法,也没有研究建议。我需要分页符,但我想手动设置它们,而不是由 Excel 自动设置。有人有这方面的经验吗?

我正在使用 C# 和 Office 互操作库,例如 using Excel = Microsoft.Office.Interop.Excel;

编辑

xlsx 是由代码创建的,它不是来自现有文件。我是这样创建的:

Excel.Application app = new Excel.Application();    
Excel.Workbook workbook = app.Workbooks.Add("");
Excel.Worksheet sheet = workbook.ActiveSheet;

【问题讨论】:

  • Excel 互操作调用 VBA 宏使用的相同 API。你可以录制一个宏做你想做的事并检查代码。如果您所做的更改未出现在宏中,则可能意味着它们无法通过 VBA 或 Interop 获得
  • @PanagiotisKanavos 如果您将该评论作为答案,我会接受。这有帮助,现在效果很好。谢谢!

标签: c# excel


【解决方案1】:

Panagiotis 的评论帮助很大。我创建了一个宏并观看了它的源代码(对于那些难以使用 VB 代码的人,我推荐 Telerik Converter 将其转换为 C#)。我在代码中添加了一行:

sheet.VPageBreaks[1].DragOff(Excel.XlDirection.xlToRight, 1);

这会将第一个垂直分页符(在我的例子中是唯一的垂直分页符)拖到右侧。

注意:我已经尝试过VPageBreaks[0],这会导致错误。这告诉我,Interop 不能使用我以前不知道的基于零的索引。

注意二:此代码仅删除垂直分页符。对于水平,您需要使用HPageBreaks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2021-10-10
    • 2011-05-16
    • 2012-07-03
    • 2013-09-03
    相关资源
    最近更新 更多