标签: ole

需要ActiveX控件将Excel嵌入到对话框中

我正在构建一个"从Excel导入"功能.它必须位于DLL中,从非MFC应用程序调用.必须提供电子表格的图像,用户可以拖动选择框(选择单元格),然后单击"导入"按钮,并发生正确的事情.无法获取电子表格,在其旁边有一个按钮,并在DLL中发生.

我在DLL中进入了MFC对话框的路径,但在尝试在对话框的窗口上为excel启动OLE客户端时被阻止.只有支持我发现使用OLE显示Excel需要SDI.我能够使自动化功能起作用,我可以读取单元格并在我的对话框上绘制它们的"假图像"......但我担心这将不符合我的要求.

所以我尝试创建一个SDI.我能够创建一个SDI,将Excel作为OLE客户端.我能够处理"选择更改"事件,并获取我需要的单元格数据.在这一点上我被挫败了两件事:

  1. 无法使此SDI在MFC DLL中工作.在CWinApp构造函数中崩溃,断言AfxGetThread不为null.将"theApp"移动到单个导出的DLL函数中的本地作用域,但仍然无法使其工作,但具有不同的症状:添加AFX_MANAGE_STATE时崩溃(AfxGetStaticModuleState()); 导出DLL函数,如果我没有使用它,则从未输入OnInitInstance.尝试添加对应用程序的Run()函数的调用,但这没有帮助.如果有人认为他们知道问题是什么,我可以发布此代码.

  2. Excel客户端项目处于活动状态时无法显示工具栏.我可以把我的"导入"(和其他选项)放在顶部的菜单栏上,但这不够明显.即使是浮动工具栏也已关闭.它是有意义的,它会这样做,因为有一个工具栏存在无法对当前活动的项目采取行动会令人困惑...但在我的情况下,这是一个问题.

所以现在我想我需要回到对话框方法,并嵌入一个ActiveX控件来调出excel电子表格文件进行导入.

必须允许我处理选择更改事件,或者必须允许我查找选择的单元格(或者如果单击对话框中的"导入"按钮导致选定的单元格未被选中,则最近选择了这些单元格.

它还必须具有合理的许可条款,因为这将用于广泛向公众提供的商业应用程序中.

如果有人知道我试过的任何一种方法的"快速修复",那也是有用的.

希望可以有人帮帮我!

windows excel mfc activex ole

5
推荐指数
1
解决办法
1902
查看次数

自动化perl中的excel文件处理并避免对话/ UI交互

当我通过OLE自动化Microsoft Excel时,如何保证不会出现弹出对话框?我正在使用Perl模块(Win32 :: OLE).我可以使用以下代码避免大多数对话框弹出窗口:

use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const;

my $excel_symbols = Win32::OLE::Const->Load('Microsoft Excel');
my $excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit();} );
$excel->{'Visible'} = 0;
$excel->{'DisplayAlerts'} = 0;
$excel->Workbooks->Open('c:\some_excel_file.xls',
  { 'UpdateLinks' => $excel_symbols->{'xlUpdateLinksNever'},
    'ReadOnly' => 1,
    'IgnoreReadOnlyRecommended' => 1
  });
Run Code Online (Sandbox Code Playgroud)

但是对于某些文件,我继续使用以下文本进行对话:

此文件不是可识别的格式.

  • 如果您知道该文件来自与Microsoft Excel不兼容的其他程序,请单击"取消",然后在其原始应用程序中打开此文件.如果要稍后在Microsoft Excel中打开该文件,请将其保存为兼容的格式,例如文本格式.
  • 如果您怀疑文件已损坏,请单击"帮助"以获取有关解决问题的详细信息.
  • 如果您仍想查看文件中包含的文本,请单击"确定".然后在文本导入向导中单击"完成".

确定取消

有时会出现类似的对话框,其中包含"确定","取消"和"帮助"按钮.

我无法控制提供给脚本的文件的质量.

excel perl automation dialog ole

5
推荐指数
1
解决办法
4594
查看次数

如何从Perl中以只读方式打开Word文档?

在Perl中是否有任何方法可以让我以只读模式获取对象,以避免在另一个用户锁定文件时弹出的对话框?

$document = Win32::OLE->GetObject("$docFile")
    or die "can't open $docFile";
Run Code Online (Sandbox Code Playgroud)

perl ole ms-word

5
推荐指数
1
解决办法
3885
查看次数

在Delphi 7中使用TExcelWorkBook SaveAs方法时出现Ole 800A03EC错误

我正在尝试打开excel 2003工作簿并将其保存为其他内容,例如excel 95.我使用以下代码:

XLSApp:=TExcelApplication.Create(Self);
XLSApp.Workbooks.Open(SomeFileName,NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,defaultlcid);
XLSWB:=TExcelWorkbook.Create(XLSApp);
XLSWB.ConnectTo(XLSApp.Workbooks.Item[1]);
XLSWB.SaveCopyAs(ExtractFilePath(edTable.Text)+'temp.xls');
XLSWB.SaveAs(SomeOtherFileName,xlExcel7,EmptyParam,EmptyParam,False,False,xlNoChange,xlUserResolution,False,EmptyParam,EmptyParam,EmptyParam,DefaultLCID);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这段代码在客户端计算机上提供了"Ole 800A03EC",而它在我的计算机上运行.请注意,我安装了Office 2007,并且他有Office 2003 SP3.

任何帮助将非常感谢.

delphi excel automation ole

5
推荐指数
1
解决办法
4万
查看次数

所有OLE错误代码的列表

是否有所有OLE错误代码的列表?

ole error-code

5
推荐指数
0
解决办法
2万
查看次数

构建与COM引用(版本1.0类型库)和VS 2010相关的警告

我刚刚完成了从Visual Studio 2008到Visual Studio 2010的一系列C#项目的重组和升级.此外,所有项目都更改为以.NET 4.0运行时为目标.一切都成功构建但是,我现在得到一堆与我的应用程序所依赖的COM引用相关的警告.其中一个警告如下.每次构建解决方案时,我都会收到类似于下面的100个警告.

Warning 60  Type library importer encountered a property getter 'ClearTopCardQue' on type 'FuelDirectOLETLB.FuelDirectOLE' without a valid return type.  The importer will attempt to import this property as a method instead. c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets  1558    9   FDServer
Run Code Online (Sandbox Code Playgroud)

我已经打电话给第三方供应商创作了我引用的对象无济于事.他们建议我确保我的目标是x86.他们还表示我应该能够针对任何版本的.NET运行时构建我的项目.就个人而言,我怀疑它与我在Visual Studio 2010/.NET Runtime 4.0中引用版本1类型库的事实有关,而在我构建VS 2008/.NET Runtime 3.5之前.我尝试构建针对所有构建配置(即x86,x64,Any Cpu)并尝试将每个版本的运行时恢复为2.0.警告关注我,因为我不确定他们指出了什么.有人可以提出任何可能有助于我找到这些警告原因的建议/建议吗?

c# ole

5
推荐指数
1
解决办法
4133
查看次数

为什么VBA中的每个类都有一个Application属性?

我想澄清一下为什么VBA中的每个类(或几乎每个类)(当您滚动对象浏览器时)都有Application属性.

MSDN说

在没有对象限定符的情况下使用时,此属性返回表示Microsoft Excel应用程序的Application对象.与对象限定符一起使用时,此属性返回表示指定对象的创建者的Application对象(可以将此属性与OLE Automation对象一起使用以返回该对象的应用程序).只读.

第一句很清楚.您没有限定符使用的托管应用程序可以是支持VBA的MS Office产品之一.

在Excel Debug.Print Application= Microsoft Excel
In Word Debug.Print Application= Microsoft Word
etc ...

但......第二句话对我来说完全不清楚......所以我在想,无论你.Application从哪里打电话,它总会归还一个物体的主人......

  • 那么,VBA中每个类有一个Application属性的重点是什么?

PS.你总是可以调用.Parent=> .Parent来升级层次结构......不是吗?你可以打电话给Application机智没有限定符来获得...

我甚至不能想到一个SSCCE OLE场景,所以我很抱歉我没有提供一个例子.的Application(财产与混淆Application )的记录不完整,这就是为什么我要求的更有经验的人来澄清这对我来说.

    一个(好吧,有点)场景,但不确定它甚至适用于这里可能是使用Interop for Office.就像,当你有再打开两个文件(一个Excel和一个字)通过获取到引用外部应用程序Range在两个S,你可以回到Microsoft ExcelMicrosoft Word..但会变成这样,即使有用的人吗?嗯......我不理解这整个概念?

excel automation vba ole class

5
推荐指数
1
解决办法
773
查看次数

上下文中的msxml3.dll sp_OAMethod'send'

Win200 + SQL Server 2005中的工作代码无法在Win2012 + SQL Server 2012 sp1下运行.

我找到的唯一真正的解决方案是:

我将C:\ Windows\System32\msxml3.dll从Server 2008复制到服务器2012上的同一目录.2012服务器问题解决了,发送POST和GET工作正常.

但由于我无法修改服务器并且msxml3.dll和msxml6.dll都被锁定 - 我需要了解错误并以其他方式应用.

代码与往常一样简单,可以抓取肥皂网服务:

Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Declare @ErrCode    Int;

Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'post','http://example.com/Authentication.asmx','false'
Exec sp_OAMethod @Object ,'setRequestHeader'    ,NULL ,'Content-Type'   ,'text/xml; charset=utf-8'
Exec sp_OAMethod @Object ,'setRequestHeader'    ,NULL ,'SOAPAction' ,'"http://www.example.com/Login"'
Exec @ErrCode=sp_OAMethod @Object, 'send',null,'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soap:Body>
    <Login xmlns="http://www.example.com/">
      <databaseName>db1</databaseName>
      <userName>login</userName>
      <password>pass</password>
    </Login>
  </soap:Body>
</soap:Envelope>'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select …
Run Code Online (Sandbox Code Playgroud)

sql t-sql soap ole sql-server-2012

5
推荐指数
1
解决办法
3811
查看次数

当从TOleContainer中提取文档数据时,`DoVerb(ovInplaceActivate)`崩溃并出现各种错误消息

当通过OLE处理Office文档时,一位客户使用我们的软件会遇到一些奇怪的行为.当某个派生TOleContainer类的实例尝试通过DoVerb(ovInPlaceActivate)调用激活OLE对象时,代码崩溃.

有各种错误消息,包括:

  • (0x80030002) 找不到%1.
  • (0x80030005) 访问被拒绝.
  • (0x800706BE) 远程过程调用失败.

看我的代码:

function TfrmOleOffice.SaveToStream: TStream;
var
  LOleContainerState: TObjectState;
  LModified: Boolean;
begin
  Result := TMemoryStream.Create;
  if IsEmpty and OleOfficeAvailable then exit;

  if OleOfficeAvailable then
  begin
    LOleContainerStateBefore := FOleContainer.State;

    LModified := FOleContainer.Modified; // 'FOleContainer.Modified' could be changed by 'FOleContainer.Close'
    FOleContainer.Close;
    FValue.Position := 0;
    if LModified then // otherwise, take stored 'FValue' (see below)
      FOleContainer.SaveToStream(FValue);
    if LOleContainerStateBefore in [osUIActive] then
      ActivateContainer; // reactivate the container
  end;
  Result.CopyFrom(FValue, 0);
end;


//---------------------------------------------------


procedure THKSOleContainer.SaveToStream(Stream: …
Run Code Online (Sandbox Code Playgroud)

delphi excel ole excel-2010

5
推荐指数
1
解决办法
265
查看次数

Powerpoint VBA - 在嵌入式Excel OLE对象中编辑表的列名

如果您运行以下代码,您将获得非常有趣的结果(仅运行PowerPoint,在运行之前关闭所有Excel实例):

'Optional - Include the "Microsoft Excel 16.0 Object Library"
Option Explicit

Public Sub test()    
    Dim oslide As slide
    Set oslide = ActivePresentation.Slides.add(1, ppLayoutBlank)

    Dim oshape As Shape 
    Set oshape = oslide.Shapes.AddOLEObject(30, 30, 50, 50, "Excel.Sheet")

    oshape.OLEFormat.Object.Sheets(1).ListObjects.add(1) 'xlSrcRange
    oshape.OLEFormat.Object.Sheets(1).Cells(1, 1) = "fewewq"

    oshape.OLEFormat.Object.Close
End Sub
Run Code Online (Sandbox Code Playgroud)

成功创建嵌入对象,并且表与指定数据一起出现.但是,当您单击嵌入的对象时,您会收到以下错误:

在此输入图像描述

没有足够的可用内存来读取工作表.

无法再以任何其他方式访问此对象,并且在关闭/打开文档并重新启动时,对象的损坏性质仍然存在.我已经验证了这个问题发生在我测试过的所有系统上(PowerPoint/Excel 2016,Windows 7 X64).

所以我的问题是,其他人是否可以重现这一点,如果是这样,为什么会发生这种情况呢?如果将"单元格(1,1)"行更改为"单元格(2,1)"没有问题,就好像编辑表格的头部会导致某些特殊行为与编辑行或其他细胞.

研究

  • 实际上还没有写到这一点,大部分内容与此特定问题无关.

  • 这篇文章声称这是一个安装太多字体(> 600)的问题.我测试了这个,我只安装了241个......

  • 有很多帖子都没有答案(这个,这个, 这个,这个)不是分配给那里的.

  • 还有一些职位完全无关,又不配发去那里.

  • 我在MS Word中测试了相同的代码,似乎工作正常,问题似乎与PowerPoint隔离

  • 我已经尝试在代码(破碎的对象)中执行一个版本,而另一个手动(工作对象),保存它们并比较二进制输出(仅嵌入对象).这听起来很酷,但它并没有给我任何更深刻的见解.我无法单独使用Excel打开嵌入对象,因为对象似乎以专有格式存储.二进制的中心区域看起来不同,但我不确定如何或为什么.到目前为止,我还没有发现将其解码为人类可读信息的方法.

  • 经过一段显着的延迟和适当的归属后,我已将此问题交叉发布到Microsoft论坛 …

excel powerpoint vba ole powerpoint-vba

5
推荐指数
1
解决办法
774
查看次数