标签: ole

通过OLE实现Excel自动化 - 抑制/捕获对话框错误?

我通过C#程序和OLE刷新Excel 2007数据连接.大部分工作都是由一个Workbooks.RefreshAll()语句完成的.

正如刷新电子表格的本质一样,各种各样的事情都可能出错.在刷新过程中,程序可以提供有关"无法从文件中读取数据'|'的对话框错误消息,以及有关"重叠数据透视表报告"的消息.这两个都是致命的,我应该能够捕获这些错误,并退出程序时出错.

不幸的是,我似乎无法捕捉到这些问题,相反,我的自动程序一直存在,直到我出现并按下对话框上的输入.

有没有人知道是否可以以编程方式捕获excel对话框中显示的错误,而不是将它们显示给用户?

c# excel ole

2
推荐指数
1
解决办法
3334
查看次数

如何在我的应用程序中嵌入Adobe Photoshop

我们正在开发一种软​​件,可以自动化Photoshop中的许多重要活动.

此应用程序针对新手.

在这个应用程序中,我想在我的应用程序窗口中嵌入Photoshop的窗口.目前,Photoshop在自己的窗口中单独运行.

如何让它在我的应用程序窗口中的给定空间中的特定位置运行?

delphi vb6 ole

2
推荐指数
1
解决办法
737
查看次数

如何在不注册ocx的情况下将具有ocx依赖性的实用程序部署到测试机器?

我有一个测试实用程序,它依赖于在我的开发机器上安装/注册的ocx文件.我们希望在测试机器上运行此工具,而不会使用任何不必要的文件污染机器.除目标机器软件外,不应安装任何内容.在网络驱动器上运行该工具或从复制到测试机器的独立目录运行该工具将是理想的选择.但是,在测试机器上注册ocx是不可能的.将ocx文件放在与exe相同的目录中不起作用.无论它仍然给我这个错误 - "应用程序无法启动,因为应用程序配置不正确.重新安装应用程序可能会解决问题." 我还能尝试什么?仅供参考,我正在使用Visual Studio 2008.

windows deployment ole ocx

2
推荐指数
1
解决办法
1486
查看次数

扩展MIDL接口和COM对象设计

我已经阅读了COM Programmer's Cookbook中详细介绍的各种COM设计模式以及一些相关的SO线程,特别是讨论组合与多重继承的线程.可能是因为我对C++和COM都太新了,我可能会错过各种来源中提出的观点,所以这里的问题用一句话来表达:

我可以扩展MIDL生成的接口以供DLL内部使用吗?如果是这样,在MIDL/COM限制下如何正确处理菱形问题/并行层次结构?

肮脏的细节......

希望能帮助其他人确定我的困惑,这是我的假设:

1)COM不支持虚拟继承,只允许通过接口进行多重继承.

2)即使COM看不到它,但是我不应该使用不受支持的C++继承,因为我不希望它直接暴露给COM.

3)因为MIDL只允许接口的单继承,所以如果我有一个并行层次结构,我需要为coclass聚合它们.

4)MIDL似乎没有声明coclass本身,所以我需要写一个声明实际类的.h文件,在那里,我可以根据需要扩展,理解COM消费者不能使用它(这没关系).

我想要做的是有一个基础对象(我还没有决定它是否是抽象的,虽然我认为它将是现在),它处理大多数实现细节并将一些特定的功能委托给子类.客户端通常会使用子类.所以,

project.idl

import "oaidl.idl"
import "ocidl.idl"

[
  object,
  uuid(...),
  dual,
  oleautomation
]
interface IBase : IDispatch {
   //stuff I want to show to COM
};

[
  object,
  uuid(...),
  dual,
  oleautomation
]
interface IChild1 : IBase {
   //stuff (in addition to base) I want to show to COM
};

[
  object,
  uuid(...),
  dual,
  oleautomation
]
interface IChild2 : IBase {
   //stuff (in addition to base) I want …
Run Code Online (Sandbox Code Playgroud)

com winapi activex ole

2
推荐指数
1
解决办法
1665
查看次数

无法通过Delphi替换word应用程序中的页脚文本

我试图替换页脚中的文本,我使用以下代码,通过它我可以替换正常内容(正文)但不替换页脚/标题中的内容

myWinWordApp := CreateOLEObject('Word.Application');
myWinWordApp.visible := true;
myWinWordApp.documents.open('c:\ole.doc');
myWinWordApp.Selection.Find.Text :=  'oo';
myWinWordApp.selection.Find.Replacement.Text := 'aa';
myWinWordApp.Selection.Find.Execute(Replace := 2);
Run Code Online (Sandbox Code Playgroud)

任何帮助都非常感谢.提前致谢

delphi ole office-automation

2
推荐指数
1
解决办法
1875
查看次数

异步拖放到Windows资源管理器

题:

我需要一个DragAndDrop解决方案来下载Windows资源管理器的C#和.NET 4.0文件夹中的文件.没有必要在计算机上安装该文件.该文件足够大,拖动时间不足以完成下载.我发现了各种问题,甚至是已经接受的答案,但没有任何问题.最接近工作的是这个演示项目:

http://blogs.msdn.com/b/delay/archive/2009/11/16/creating-something-from-nothing-and-knowing-it-developer-friendly-virtual-file-implementation-for-net- refined.aspx

如何实现此代码下载文件作为将其放入Windows资源管理器中的放置位置的操作的一部分?

c# winapi drag-and-drop ole .net-4.0

2
推荐指数
1
解决办法
1725
查看次数

Delphi OLE Automation冻结GUI

我们在Delphi 7中使用一些OLE自动化来打开word文档,然后一旦加载,保存它,并将其加载到数据库中.

这工作正常,但部分要求是在OLE位发生时有一个进度条,如果OLE部分耗时太长则还有一个超时.

我们遇到的问题是整个GUI在OLE发生时冻结.进度条什么都不做,然后在最后拍摄.

关于我们如何处理这个问题的任何想法?

delphi ole ms-word

2
推荐指数
1
解决办法
563
查看次数

SSIS:"GO'附近的语法不正确." 错误

我在Visual Studio 2012中使用SSIS运行SQL Server 2012数据库.使用OLE DB Source时,我收到如下所示的错误.此OLE DB源正在执行类似于下面进一步显示的SQL.当我在结尾删除GO语句时,SSIS包执行正常.

在SQL Server Management Studio中,无论GO语句是否存在,SQL都会执行ok.

OLE DB源正在数据流任务中执行.

为什么这个GO在SSIS包中执行时会导致这个错误,应该怎么做呢?非常感谢.

错误:

[来自SQL变量的OLE DB源[33]]错误:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80040E14.OLE DB记录可用.来源:"Microsoft SQL Server Native Client 11.0"Hresult:0x80040E14描述:"语句无法准备.".OLE DB记录可用.来源:"Microsoft SQL Server Native Client 11.0"Hresult:0x80040E14说明:"GO'附近的语法不正确.".

SQL:

/* Test statement */
SELECT 'test' as N'test'
GO
Run Code Online (Sandbox Code Playgroud)

ssis ole sql-server-2012

2
推荐指数
1
解决办法
4798
查看次数

OLE Excel输出中的国际日期格式问题

在我正在使用Excel产品的产品中,使用Delphi的OLE生成电子表格.电子表格包含许多日期,其中应用程序从系统设置加载短日期格式并将其应用于单元格.除非系统格式设置为至少俄语,巴什基尔语,塔塔尔语,雅库特语,哈萨克语和乌兹别克语之一(可能还有其他我没有尝试过),否则这种方法很有效.

代码是 -

xlws.Cells[irow,icol] := ActivityData.Target_Date;
xlvalidrange := xlws.Range[xlws.Cells[irow,icol],xlws.Cells[irow,icol]];
xlvalidrange.NumberFormat:= LocShortDateFormat;
Run Code Online (Sandbox Code Playgroud)

在这种情况下(在调试时),ActivityData.Target_Date是41192,这是Excel存储日期和时间的格式,LocShortDateFormat等于'dd.MM.yyyy'.这与Windows中显示的俄语存储日期格式相匹配,并使用代码以编程方式检索 -

LocShortDateFormat := ShortDateFormat;
Run Code Online (Sandbox Code Playgroud)

使用此格式打开电子表格会显示消息 -

Excel在Spreadsheet.xlsx中找到不可读的内容您要恢复此工作簿的内容吗?

这样做的数据简单地显示为单元格中的NO,格式为41192.更奇怪的是,手动应用格式字符串'dd.MM.yyyy'然后在单元格中显示'dd.MM.yyyy'代替数据.

这同样适用于任何标准日期/时间字符串格式化字符.通过选择"日期"类别和相应类型作为格式,可以手动将数据更改为日期格式,然后正确显示,因此这不是数据问题,而是格式字符串.

当手动选择正确的日期格式时,Excel使用的格式字符串是ДД.ММ.ГГГГ - 手动更改调试时使用的格式字符串会在生成的电子表格中生成正确的输出,并且不可读的内容消息将消失.

奇怪的是,中文,日文,塞尔维亚文和马其顿文(作为非英文字符集语言的样本)都使用标准的日期/时间格式字符.

在Excel本身,标准字符似乎无法正常运行,即使电子表格是新的并且尚未以编程方式创建,即从Excel应用程序中创建的新电子表格.

在这种情况下,它似乎不是一个Delphi或Windows问题(C#Windows表单没有问题使用标准字符正确格式化日期,即使使用俄语语言环境),但它仍然留下如何返回正确格式的问题Delphi中的字符串.

我并不热衷于做一系列有条件的"if"语句测试已知有问题的语言环境,但这似乎是基于我迄今为止所做的研究来处理问题的唯一方法.

有没有办法要求Excel通过OLE使用本地日期格式而不提供格式化字符串,或者获取Excel用于格式化本地化日期的字符串以便以正确的格式提供字符串?

delphi excel localization ole

2
推荐指数
1
解决办法
2387
查看次数

如何查询嵌入的OLE应用程序的显示名称

我想查询OLE应用程序的显示名称,它嵌入在我的Delphi XE4 Win32应用程序中.

TOleContainer使用类,容器可以包含不同的OLE应用程序(例如MS Word,MS Excel,...),具体取决于在其中编辑的文件.

我想要返回的是Microsoft Word 2007(或2010或2013或...)或至少Microsoft Word,因为它显示在普通Word实例的标题栏中.


编辑: TOndrej的回答非常有帮助.谢谢.

不幸的是,正如我在他的回答中的评论中所描述的那样,它没有显示真正的应用程序标题.我在SO上发现了这个问题.据说,我可以通过_Application.Caption属性访问主机应用程序的标题.我没有实例_Application,但IOleObject.Typecast(MyOleObjectInterface as _Application)失败了.

如何访问OleObject _Application

delphi excel ole ms-word

2
推荐指数
1
解决办法
276
查看次数