我正在使用Microsft Office Interop API。我的问题与Excel有关。
我使用Interop API编写了一个程序来格式化Excel文档,然后将它们发送到打印机。但问题是,我们偶尔会遇到文件,其中人们创建了一个跨越65,000多行的列,并且它包含的是一个公式。该公式仅为前100行创建输出,然后其余显示为空白。但是,当发送到打印机时,由于这些公式,它会尝试打印10,000页等。
我首先想办法告诉Excel不要打印这些范围。我找不到任何设置来忽略这些。其次,我考虑过以编程方式执行此操作的方法,但这种逻辑非常简单,可能会导致“常规”文件出现问题,而这些文件不包含这样的公式。
有没有人知道让Excel忽略这些等同于什么的公式的好方法?
我正在使用Delphi和Office 2007 Interop API。
答案 0 :(得分:4)
不。就Excel而言,如果单元格包含公式,则填充单元格,无论该公式的结果如何。
在带有值的单元格中键入[end]然后[down]会将您带到最后一个填充的单元格,然后从当前位置开始,该列中的第一个空白单元格。因此,在带有公式的列中键入End-Down应该会一直向下到底。 p>
您所拥有的选项是在发出打印命令之前告诉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
希望有所帮助!