标签: office-automation

仅在尝试使用Word DocumentClass时在prod中获取对象引用错误

我正在编写一个使用.dotx模板的程序,并在aspx页面中进行数据合并.该程序在我的开发工作站本地工作正常,但当我将它部署到测试IIS服务器时,它在下面的第二行失败,给我一个对象引用错误.

我之前遇到问题,因为Word Com对象不在IIS服务器上,因此我将Word加载到服务器上并在DCom中设置权限并解决了该问题.但现在我在以wRange = .....开头的行上出现此错误

正如我所说,该程序在调试模式下完美地工作.

有任何想法吗?

Microsoft.Office.Interop.Word.DocumentClass

System.NullReferenceException: Object reference not set to an instance of an object
Run Code Online (Sandbox Code Playgroud)

代码行:

Document BaseDocument = oWord.Documents.Open(ref oTemplate, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

wRange = BaseDocument.Bookmarks.get_Item(ref endOfDoc).Range;
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net ms-word office-automation

6
推荐指数
2
解决办法
4937
查看次数

安装2007兼容包后,Office主互操作程序集无法正常工作

我有一个C#程序,它做了一些Word和Excel自动化,它使用了Office 2003主互操作程序集.我部署它的方式是将Interops包含在bin中,我让我的程序从那里引用它,而不是从GAC引用它(不是非常专业,但它工作了fpr年).最近在3台机器上安装了Office 2007兼容包,现在当我的软件试图调用Word或者我发现错误时,我得到一个错误:

无法将Microsoft.Office.Interop.Word.ApplicationClass类型的COM对象转换为接口类型Microsoft.Office.Interop.Word.Application,此操作失败,因为QueryInterface在具有IID的接口的COM组件上调用{00020970-0000由于以下错误,-0000-C000-000000000046}失败:库未注册.(HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED))

经过一番搜索后,我注意到安装兼容包Word11和Word12都安装在GAC中,并且与Excel相同.

我试图让我的程序在GAC中引用Word11互操作,但仍然没有帮助.我没有安装Word12互操作,仍然没有任何帮助.似乎安装这似乎已经改变了一些注册表设置或我的软件混淆的东西找不到正确的库.

有人有想法吗?

word-automation pia office-automation

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

"被呼叫被拒绝的电话"

我们正在将大量应用程序从Windows XP迁移到Windows 7,并且遇到了Word Automation的老问题.

我们在其中一个应用程序中遇到问题,我们在尝试连接到Word时会收到"被Callee拒绝",除非它已经打开.我们使用以下代码在Delphi 2000/Windows XP中解决了这个问题:

WordApp.Connect;
WordApp.Visible := True;
WordApp.Documents.Add(Template, EmptyParam, EmptyParam, EmptyParam);
WordApp.ChangeFileOpenDirectory(jdir);
WordApp.Visible := False;
WordDoc.ConnectTo(WordApp.ActiveDocument);
Run Code Online (Sandbox Code Playgroud)

这不再是Windows 7下的技巧 - 并且在XE2下重新编译似乎没有帮助.

我在这里看到了一个与Visual Studio 有关的问题- 任何人都知道如何将它应用到Delphi(XE2在这个阶段会好的)

delphi ms-word office-automation delphi-xe2

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

Excel VBA SendKeys不会导致IE 9保存下载

我正在编写一个宏来从我公司的内部网站下载csv文件.

由于许多原因,我无法使用任何xmlhttp对象.宏将下载该文件.问题是Internet Explorer 9会提示用户使用"打开","保存"和"取消"按钮.

在IE中,Alt + Shift + S将保存下载,但我无法从Excel VBA中获取Sendkeys"%+ s"方法.

这是相关代码:

Function followLinkByText(thetext As String) As Boolean
   'clicks the first link that has the specified text
    Dim alink As Variant

    'Loops through every anchor in HTML document until specified text is found
    ' then clicks the link
    For Each alink In ie.document.Links
       If alink.innerHTML = thetext Then
            alink.Click
            'waitForLoad
            Application.Wait Now + TimeValue("00:00:01")
            Application.SendKeys "%+s", True

            followLinkByText = True
            Exit Function
        End If
     Next

End Function
Run Code Online (Sandbox Code Playgroud)

excel automation vba browser-automation office-automation

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

Excel 2010中的Dir函数VBA无法正常工作

我试图循环一个给定的目录,以找到最新下载的csv文件.由于某种原因,即使文件存在,我的Dir函数也找不到任何文件.我对VBA并不完全熟悉,所以我可能会错过某种执行Dir功能的参考,但我找不到任何在线告诉我需要的东西.所有的例子和论坛都像我一样使用Dir,但我不能让我的工作.这是代码,如果你能看到我做错了,请告诉我:

Public Function Get_File() as string
   Dim filePath As String

   ChDir ("..")
   filePath = CurDir
   'Goes back to Documents directory to be in same directory as macro
   ChDir (filePath & "\Documents")
   filePath = filePath & "\Downloads\test.txt" 
   filePath = getLatestFile(filePath)

   Get_File = filePath
End Function

Public Function getLatestFile(pathToFile As String) As String
   Dim StrFile As String
   Dim lastMod As Variant
   Dim nextMod As Variant
   Dim lastFileName As String

   StrFile = Dir(pathToFile)
   lastFileName = StrFile
   lastMod = FileDateTime(StrFile)
   While Len(StrFile) > 0 …
Run Code Online (Sandbox Code Playgroud)

excel automation vba excel-vba office-automation

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

如何使用c#,dot net,word templates,xml在word 2010中生成报告

我们有一个数据库应用程序,用于存储我们要在Microsoft Word中报告的数据.

假设我的客户的所有信息都存储在数据库系统中,现在我要求创建数百个单词信件,这些信件将发送给我的客户.这些字母具有相同的内容,但客户名称,客户地址等不同.

我想通过使用c#和.Net创建包含内容控件的文档模板来使用Office Word 2010,将sql作为数据库来替换此模板的内容.

我一直在寻找有关在C#和dot net和sql中自动化Word 2010的文章.有人能给我一个正确的方向吗?

.net c# xml ms-word office-automation

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

授予 MSysObjects 读取权限

我需要获取数百个 MS Access DB 的元数据,因此我需要自动化元数据收集过程。我想查询此处描述的内容,但在查询数据库之前,我需要对MSysObjects表进行读取访问。

我不断收到以下错误:

无法读取记录;没有“MsysObjects”的读取权限。

所以我更深入地挖掘:

我已经阅读了 C# 部分中有关类似问题的文章(请参阅此处以及此一篇)。

我编写了一个简单的脚本,该脚本非常适合创建表等,但我在设置读取访问权限时遇到问题。

$ScrUsr = $(whoami)
Write-Host $ScrUsr

$cmd = "GRANT SELECT ON MSysObjects TO [$ScrUsr]"
Write-Host $cmd

Function Invoke-ADOCommand($Db)
{
  $connection = New-Object -ComObject ADODB.Connection
  $connection.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db;" )
  $command = New-Object -ComObject ADODB.Command
  $command.ActiveConnection = $connection
  $command.CommandText = $cmd
  $rs = $command.Execute()
  $connection.Close()
} 

$Db = "C:\Temp\test1.accdb"

Invoke-ADOCommand -db $Db 
Run Code Online (Sandbox Code Playgroud)

执行脚本引发以下错误原因:

无法打开 Microsoft Office Access 数据库引擎工作组信息文件。

我怎样才能允许读取权限MSysObjects

powershell ms-access metadata adodb office-automation

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

使用Powershell将Excel工作表从一个工作簿复制到另一个工作簿

我想使用Powershell将工作表从一个工作簿复制(或移动)到另一个工作簿.

我以前做过这个,不记得怎么做.我想我使用了CopyTo()函数.

刚入门.

$missing = [System.Type]::missing
$excel = New-Object -Com Excel.Application

$wb1 = $excel.Workbooks.Add($missing)
$wb2 = $excel.Workbooks.Add($missing)

# Now, to copy worksheet "Sheet3" from $wb2 into $wb1 as second worksheet.
# How?
Run Code Online (Sandbox Code Playgroud)

com excel powershell vba excel-vba office-automation

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

C#中的引用和意外结果

我对C#和Office自动化比较陌生,最近我发现自己试图获取对某人的Outlook收件箱的引用并按接收时间对电子邮件进行排序.直到我在网络上的其他地方找到一个解决方案,其中将收件箱分配给Microsoft.Office.Interop.Outlook.Items类型的本地变量,然后对局部变量执行排序并且它可以工作时,它才能工作.然而,问题是为什么?我认为在C#对象中是引用,当你声明一个新的Outlook.Inbox引用然后从用户的收件箱中分配它时,它只是作为实际电子邮件的附加指针,并不实际复制每封电子邮件到一个新的集合.所以它应该与在原始参考上调用Sort无异,对吧?显然我错了,所以我很感激解释.感谢名单!

using Outlook = Microsoft.Office.Interop.Outlook;    
...
Outlook.Folder oInbox = (Outlook.Folder)oApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

oInbox.Items.Sort("[Received]", true); //this doesn't produce expected results
Outlook.Items inboxFolder = (Outlook.Items)oInbox.Items;
inboxFolder.Sort("[Received]", true);  //this DOES sort the items!
Run Code Online (Sandbox Code Playgroud)

c# oop outlook reference office-automation

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

当自动化应用程序退出时,如何避免Excel显示"保存"对话框

我有一个用Delphi编写的excel自动化应用程序,它访问给定的excel工作簿并提取应用一些内部逻辑不同的工作表数据.

它在Excel 2003和2007上运行了多年.

最近一些用户使用Excel 2010.在这些用户上,当我的应用程序退出时,Excel会显示一个对话框,要求用户保存未修改的工作表.该消息说明了以新的2010格式保存的公式版本.对不起,我没有确切的话,因为它不是英语办公室套餐.

我的应用程序如何防止excel 2010显示这个烦人且无用的盒子?

大多数用户都拥有Excel 2007,因此无论运行我的应用程序的用户的实际Excel版本如何,我的应用程序需要处理的大多数文件都采用该格式,并且将来也会如此,因此迁移所有文件不是一种选择.

delphi excel office-automation excel-2010

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