【发布时间】:2019-09-11 10:43:06
【问题描述】:
我正在尝试从 Delphi 代码以编程方式从一个 Excel 复制粘贴到另一个 Excel,扩展问题和源代码位于 Excel Copy-Paste from Delphi (OLE) with all the formatting?
可以使用 Excel 应用程序中的 2 个连续操作在 Excel 应用程序中复制粘贴列宽和数据和格式,然后在 https://www.extendoffice.com/documents/excel/1867-excel-copy-column-width.html 之后:1) Paste Special... - Other Paste Options - Column Widths; 2)Paste Special... - Other Paste Options - All Using Source Theme.
Excel 规范 https://docs.microsoft.com/en-us/office/vba/api/excel.range.pastespecial 和 https://docs.microsoft.com/en-us/office/vba/api/excel.xlpastetype 定义,这两个操作的相应代码是:
xlPasteColumnWidths 8 Copied column width is pasted.
xlPasteAllUsingSourceTheme 13 Everything will be pasted using the source theme.
所以,我的问题的解决方案应该是:
Sheet.Range['A1','CJ26'].PasteSpecial(8);
Sheet.Range['A1','CJ26'].PasteSpecial(13);
但这会产生非常奇怪的 excel - 不复制列宽,复制格式,但复制数据作为超链接。
Excel_TLB 表明常量确实是正确的:
type
XlPasteType = TOleEnum;
const
xlPasteAllUsingSourceTheme = $0000000D; //13
xlPasteColumnWidths = $00000008; //8
xlPasteValidation = $00000006;
所以,很明显,Delphi Excel OLE 不符合规范,即具有 Excel 规范或 Excel 库的东西已经坏了!怎么办?
我手动重复了这个复制粘贴序列并记录了 VB 宏 - 这个宏正是我要运行的 Delphi 代码:
Sub Macro1()
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Range("E10").Select
Application.CutCopyMode = False
End Sub
【问题讨论】:
-
请注意,没有“Delphi Excel OLE”之类的东西。不像 Delphi 附带了一个用于操作 Excel 的庞大 Pascal 库——您直接与 Excel 自动化服务器对话(如果我没记错术语的话)。
-
这里没有要求Delphi符合的规范,因为它只是通过Excel自己的自动化对象直接自动化Excel。 Delphi 对 Office 的 COM 支持只是对 MS 提供的基础 Office 对象的包装。它不会改变它们的功能。自己阅读源代码。如果常量定义正确(如您所指),并且它们直接通过 COM 传递给自动化对象(正如您在源代码中看到的那样),那么问题不在于 Delphi 不符合任何规范.哪里有 minimal reproducible example 来演示这个问题?
-
在另一个问题中,您被要求尝试手动重复操作。如果您完全重复您的代码所做的事情,您将很快了解发生了什么。最重要的部分是代码正在启动 Excel 的第二个实例。
-
不是,你粘贴的是同一个实例中记录的操作。您必须在 两个实例 中执行此操作 - 您会注意到没有选项可以随意粘贴。
-
您必须从最重要的部分开始 - 启动两个单独的 Excel 实例 - 您可以轻松找到操作方法。从用户界面来看这并不简单,但这就是您的代码正在做的事情。
标签: excel delphi ole delphi-2009