Excel - 如何忽略公式等于什么的行?

时间:2010-09-28 16:21:13

标签: .net excel delphi interop ms-office

我正在使用Microsft Office Interop API。我的问题与Excel有关。

我使用Interop API编写了一个程序来格式化Excel文档,然后将它们发送到打印机。但问题是,我们偶尔会遇到文件,其中人们创建了一个跨越65,000多行的列,并且它包含的是一个公式。该公式仅为前100行创建输出,然后其余显示为空白。但是,当发送到打印机时,由于这些公式,它会尝试打印10,000页等。

我首先想办法告诉Excel不要打印这些范围。我找不到任何设置来忽略这些。其次,我考虑过以编程方式执行此操作的方法,但这种逻辑非常简单,可能会导致“常规”文件出现问题,而这些文件不包含这样的公式。

有没有人知道让Excel忽略这些等同于什么的公式的好方法?

我正在使用Delphi和Office 2007 Interop API。

2 个答案:

答案 0 :(得分:4)

不。就Excel而言,如果单元格包含公式,则填充单元格,无论该公式的结果如何。

在带有值的单元格中键入[end]然后[down]会将您带到最后一个填充的单元格,然后从当前位置开始,该列中的第一个空白单元格。因此,在带有公式的列中键入End-Down应该会一直向下到底。

您所拥有的选项是在发出打印命令之前告诉Excel确切打印的范围。您可以使用与Print |对应的方法执行此操作设置范围菜单选项(抱歉,目前没有可用的com接口)。

要查找要打印的范围,您需要最右边的列和数据范围的最底行。假设您的第一行包含列标题,只需迭代第一行的单元格值,并在获得空白值时停止。

要查找数据范围的最底行,您需要一个没有公式但是“正常”值的列,并且在数据范围内的任何行中都没有空白值。如果您的数据始终包含此类列,则可以对其进行迭代以查找最后填充的行,从而查找打印范围的下限。

答案 1 :(得分:4)

我不知道Delphi,但我创建了一个宏来使用

获取最后一个活动列
With ActiveSheet
    row = .Cells(.Rows.Count, "B").End(xlUp).row
End With

然后有了这行,您可以尝试打印所需的列。

ActiveSheet.Range("A1:" & "D" row).Select
Selection.PrintOut Copies:=1, Collate:=True

希望有所帮助!