我正在构建一个"从Excel导入"功能.它必须位于DLL中,从非MFC应用程序调用.必须提供电子表格的图像,用户可以拖动选择框(选择单元格),然后单击"导入"按钮,并发生正确的事情.无法获取电子表格,在其旁边有一个按钮,并在DLL中发生.
我在DLL中进入了MFC对话框的路径,但在尝试在对话框的窗口上为excel启动OLE客户端时被阻止.只有支持我发现使用OLE显示Excel需要SDI.我能够使自动化功能起作用,我可以读取单元格并在我的对话框上绘制它们的"假图像"......但我担心这将不符合我的要求.
所以我尝试创建一个SDI.我能够创建一个SDI,将Excel作为OLE客户端.我能够处理"选择更改"事件,并获取我需要的单元格数据.在这一点上我被挫败了两件事:
无法使此SDI在MFC DLL中工作.在CWinApp构造函数中崩溃,断言AfxGetThread不为null.将"theApp"移动到单个导出的DLL函数中的本地作用域,但仍然无法使其工作,但具有不同的症状:添加AFX_MANAGE_STATE时崩溃(AfxGetStaticModuleState()); 导出DLL函数,如果我没有使用它,则从未输入OnInitInstance.尝试添加对应用程序的Run()函数的调用,但这没有帮助.如果有人认为他们知道问题是什么,我可以发布此代码.
Excel客户端项目处于活动状态时无法显示工具栏.我可以把我的"导入"(和其他选项)放在顶部的菜单栏上,但这不够明显.即使是浮动工具栏也已关闭.它是有意义的,它会这样做,因为有一个工具栏存在无法对当前活动的项目采取行动会令人困惑...但在我的情况下,这是一个问题.
所以现在我想我需要回到对话框方法,并嵌入一个ActiveX控件来调出excel电子表格文件进行导入.
必须允许我处理选择更改事件,或者必须允许我查找选择的单元格(或者如果单击对话框中的"导入"按钮导致选定的单元格未被选中,则最近选择了这些单元格.
它还必须具有合理的许可条款,因为这将用于广泛向公众提供的商业应用程序中.
如果有人知道我试过的任何一种方法的"快速修复",那也是有用的.
希望可以有人帮帮我!
我正在尝试打开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.
任何帮助将非常感谢.
我花了一整天的时间在网上搜索答案。显然 tsql 没有自己漂亮的写入文件命令。这是我的困境
我有一个正在创建的加载文件,其中一行的长度可以达到 10K+。SQL Server varchar(MAX) 限制是 8000(所以我相信)所以我把这些行分成几个变量。我尝试进行打印,但窗口窗格允许 4000。解决方法是一次打印一个变量的这些断行,但这对于体力劳动来说可能会变得乏味,所以我选择将其写入 txt 文件中,一次一个变量时间。
我通过 xpcommandshell 研究了 BCP,它看起来很有希望。问题是我可以让这行在命令提示符下工作,但完全相同的行在 TSQL 查询上不起作用:
declare @cmd varchar(8000)
select @cmd = 'bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T'
exec master..xp_cmdshell @cmd
Run Code Online (Sandbox Code Playgroud)
bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T 在命令提示符下工作得很好
尽管取得了一点进展,但我的经理不想走那条路。因此,在通过在 SQL 上执行以下行启用 sp_configure 后,我选择了 sp_OACreate 和 sp_OAMethod:sp_configure 'Ole Automation Procedures', 1
这条路线的第一行是这样的:
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT
Run Code Online (Sandbox Code Playgroud)
@hr 给出一个 0 所以这很好,但 @objFileSystem 产生 16711422 并且 @hr …
我刚刚完成了从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.警告关注我,因为我不确定他们指出了什么.有人可以提出任何可能有助于我找到这些警告原因的建议/建议吗?
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) 曾几何时,Windows SDK(或 Visual Studio)有一个名为 IROTVIEW 的工具,用于枚举运行对象表 (ROT)。
我现在在哪里可以得到这个工具?
如果您运行以下代码,您将获得非常有趣的结果(仅运行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 工作簿,它允许我输入某些字段的值,单击一个按钮,然后根据我的输入生成一个 PDF 报告。然后我必须选择保存此 PDF 文件的目录。
我必须创建一个类似 REST 的 API,它将接收带有 Excel 工作表输入参数的有效负载,并返回生成的 PDF 文件。
我无法访问 Workbook 中的宏、数据和逻辑,因此我不能直接在我的 API 中实现相同的逻辑。工作簿也会定期更改(公式、宏等),唯一保留的是输入字段和 PDF 输出。
在对这个库进行了一些测试之后,我不确定它是否允许我调用一个按钮(生成 PDF)并指定输出目录。我主要使用 C# 和 .NET,我该如何实现?
我正在致力于迁移使用 regsvr32 注册并主要在 vbscript 和 ASP Classic 中使用的旧版 VB6 COM 库。
新的 .NET 4.8 替代库已通过 regasm 注册。
一切都很好,直到我遇到了一些无法直接迁移的功能,因为我在这个领域没有足够的知识。
旧版 VB6 库具有以下 Typelibrary 代码(来自 OleView,为方便起见进行了缩减):
[id(0x00068), propget]
VARIANT_BOOL IncomeOverride([in] short index);
[id(0x00068), propput]
void IncomeOverride(
[in] short index,
[in] VARIANT_BOOL rhs
);
[id(0x00069), propget]
CY IncomeOverrideAmt([in] short index);
[id(0x00069), propput]
void IncomeOverrideAmt(
[in] short index,
[in] CY rhs
);
Run Code Online (Sandbox Code Playgroud)
调用者使用这些方法如下:
oTest.IncomeOverride(1) = True
oTest.IncomeOverrideAmt(1) = 12
Run Code Online (Sandbox Code Playgroud)
首先我尝试使用属性。但由于 C# 中没有可用的参数化属性,我不得不尝试如下方法:
[DispId(0x00068)]
bool IncomeOverride([In] short index);
[DispId(0x00068)]
void IncomeOverride([In] short index, [In] bool …Run Code Online (Sandbox Code Playgroud)