标签: office-automation

使用SetParent()时问题定位窗口

我试图childForm通过PInvoke使用SetParent API 设置为主Excel窗口的子项:

Form childForm = new MyForm();
IntPtr excelHandle = (IntPtr) excelApplication.Hwnd;
SetParent(childForm.Handle, excelHandle);
childForm.StartPosition = FormStartPosition.Manual;
childForm.Left = 0;
childForm.Top = 0;
Run Code Online (Sandbox Code Playgroud)

如您所见,我的目的也是将孩子放在Excel窗口的左上角.然而,由于某种原因,childForm总是在一些奇怪的位置结束.

我做错了什么?

c# excel office-automation setparent winforms

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

在Word Addin throws中动态添加RibbonButton Collection是只读的

我是Word AddIns的新手,并尝试添加功能区组.对于每个RibbonGroup,我动态添加RibbonMenu,然后将RibbonButtons添加到组内的菜单.

我得到了地面工作,它似乎很好,但每当我访问任何集合

例如:group1.Items.add(new RibbonButton()); 它让我觉得Collection是ReadOnly.

但是当我调试时,Collection的IsReadOnly标志设置为False,这清楚地表明Collection不是readonly?

我错过了什么.

ms-word office-automation office-interop c#-4.0

3
推荐指数
1
解决办法
3969
查看次数

使用高级选项打印(纸盘选择,双面打印,装订)

我们有一个管理打印文档的项目.起初我想知道为什么不能在一个地方设置打印选项.例如,可以使用MS Word自动化完成第一页和其他页面的打印机托盘选择:

var doc = _applicationObject.Documents.OpenNoRepairDialog(FileName: ref sourceFile, ReadOnly: ref readOnly,
                                                                 AddToRecentFiles: ref addToRecentFiles,
                                                                 Visible: ref visible);
doc.PageSetup.FirstPageTray = (WdPaperTray) firstPageTrayCode;
doc.PageSetup.OtherPagesTray = (WdPaperTray) otherPagesTrayCode;
_applicationObject.ActivePrinter = printerPath;
doc.Activate();
_applicationObject.PrintOut(Background: ref backgroundPrint, FileName: sourceFile);
doc.Close(ref saveChanges, ref _missing, ref _missing);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,打印机托盘被指定为整数,因为某些打印机没有托盘的标准值(我们遇到了HP的问题 - 这里描述的托盘代码).所以我们首先使用代码检索托盘打印机的内容:

var setting = new PrinterSettings();
setting.PrinterName = myPrinterName;
foreach (PaperSource tray in setting.PaperSources)
{
    Console.WriteLine("\t{0}: #{1}", tray.SourceName, tray.RawKind);
}
Run Code Online (Sandbox Code Playgroud)

这段代码没有任何问题.

但是这里没有办法指定双面打印和装订选项.双面打印可以做到的,使用驱动程序功能OpenPrinter和SetPrinter,就像描述这里的以及和微软推荐此论坛主题. Staple完全不清楚 …

.net printing duplex tray office-automation

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

使工作簿可见

我有以下代码:

Dim DumpXlApp As Excel.Application = New Excel.Application
Dim DumpWkBk As Excel.Workbook
DumpWkBk = System.Runtime.InteropServices.Marshal.BindToMoniker(FilePath)
DumpXlApp = DumpWkBk.Parent
DumpXlApp.Visible = True
Run Code Online (Sandbox Code Playgroud)

我无法让DumpWkBk工作簿变得可见.是问题DumpXlApp = DumpWkBk.Parent线吗?我不认为这是BindToMoniker线,因为我可以用DumpWkBk做事.

vb.net excel office-automation

3
推荐指数
1
解决办法
2953
查看次数

在服务器端生成的Excel中获取System.Runtime.InteropServices.COMException错误

我们有一个Web应用程序,可以生成excel电子表格并在服务器端运行宏.然后通过电子邮件将它们发送给不同的人.它是我们正在转换的遗留报告风格的一部分,但仍然支持我们作为IIS中的网站提供的新应用程序.

我知道办公自动化是一种不好的做法,因为我看到微软的信息不支持.这里的答案也表明打开excel错误:System.Runtime.InteropServices.COMException(0x80080005):使用CLSID检索组件的COM类工厂

无论如何缩短故事,excel报告都是在批处理场景中生成的,可以生成3到300个发送给不同人的报告.报告生成工作正常,直到它击中15至20项左右然后它疯狂,它给我下面的错误

System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
   at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
   at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
   at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at Ci.Infrastructure.Reporting.ReportProviderExcel.RunReport() …
Run Code Online (Sandbox Code Playgroud)

.net c# com ms-office office-automation

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

VB.NET 与 C# 有何不同之处:Excel 在控制台应用程序结束后退出而不显式释放任何内容?

我有两个 .net-6 控制台应用程序:

C# 中的一个

using Excel = Microsoft.Office.Interop.Excel;

Console.WriteLine("Hello, World!");

var xl = new Excel.Application();
var wb = xl.Workbooks.Open(@"c:\temp\test-2.xlsx");

wb.Close(0);
xl.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xl);

wb = null;
xl = null;
Run Code Online (Sandbox Code Playgroud)

另一种是 VB.NET 中的。

Imports System
Imports Excel = Microsoft.Office.Interop.Excel

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello World!")

        Dim xl = New Excel.Application()
        Dim wb = xl.Workbooks.Open("c:\\temp\\test-2.xlsx")

        wb.Close(0)
        xl.Quit()

        'System.Runtime.InteropServices.Marshal.ReleaseComObject(wb)
        'System.Runtime.InteropServices.Marshal.ReleaseComObject(xl)

        'wb = Nothing
        'xl = Nothing


    End Sub
End Module
Run Code Online (Sandbox Code Playgroud)

两个控制台中的项目配置是相同的:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <RootNamespace>OfficeInteropTest</RootNamespace>        
    </PropertyGroup>

    <ItemGroup>
        <COMReference …
Run Code Online (Sandbox Code Playgroud)

c# vb.net office-automation office-interop .net-6.0

3
推荐指数
1
解决办法
109
查看次数

在代码自动化时,是否可以抑制Visio的宏警告提示?

我正在从VB.NET应用程序自动化Visio 2003.我的代码看起来像这样(删除了无趣的东西):

Dim objApp As New Microsoft.Office.Interop.Visio.InvisibleApp
objApp.Settings.ShowFileOpenWarnings = False
Dim objDoc As Microsoft.Office.Interop.Visio.Document
objDoc = objApp.Documents.Open(VisioFilename)
Run Code Online (Sandbox Code Playgroud)

我发现最后一行导致Visio引发一个隐藏的MessageBox说:

此文档中的宏被禁用,因为安全级别很高,并且宏未经过数字签名或验证为安全.要运行宏,您可以让它们签名或更改安全级别.

由于这将在计算机上运行,​​我无法控制文件,我无法控制这些选项对我来说都不适用.我真的不在乎宏被禁用,我只是使用Visio将文件从其原生格式转换为SVG.我当然不希望向用户建议他们降低安全级别,也不想为他们降低安全级别.

从上面的代码中可以看出,我关闭文件打开警告,但似乎不包括宏警告.由于我使用的是Visio.InvisibleApp,因此警告不会显示给用户.运行Visio的可见实例无济于事,因为我正在创建批处理转换器,即使消息可见,也意味着用户必须为每个文件单击"确定".这将使批量转换功能基本上无用.

我看到Visio类有一个VBAEnabled属性,但它是只读的.如果有办法我可以在打开文件时关闭VBA,它可能会解决问题.我查看了所有属性和类中的Settings属性,但找不到任何内容.我已经完成了大量的Google搜索,无法找到解决此问题的任何内容.

任何人都知道在使用Visio自动化时是否可以抑制该警告?如果我切换到Visio 2007,我可以这样做吗?

vb.net visio office-automation

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

无法通过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
查看次数

在C#中重命名Excel工作表名称

VS 2008/C#.

在传递电子表格的文件路径时,我需要重命名工作表.

如何将Excel工作表的Sheet1重命名为"ABC".

我们将Excel工作表导出到SQL数据库.Excel工作表中的记录由最终用户手动编辑和更新.列值可以具有不同的数据类型.

默认情况下,电子表格将有三张表格作为Sheet1,Sheet2,Sheet3.

最终用户,通常在Sheet1上工作.我们需要为这个Sheet1维护一个静态名称,这有助于我们将Sheet1导出到SQL数据库.

如果我们将Sheet1重命名为ABC,我们将保持相同的名称.我们不能像那样导出默认表.因为,最终用户可能会更改其名称或坚持使用默认名称.

为了避免混淆,我们决定重命名Spread Sheet的Sheet1.

c# office-automation c#-3.0

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

Excel应用程序在内存中不断增长

我在IIS上有一个ASP.net应用程序.在这个应用程序中,我创建了一个Excel应用

using Excel = Microsoft.Office.Interop.Excel;
public Excel.Application ExlApp;
//
public Excel.Workbook ExlWb;
//
public Excel.Worksheet ExlWs;
Run Code Online (Sandbox Code Playgroud)

在应用程序工作期间,我创建了一个新的工作簿,最后,我销毁了我的对象:

        GC.Collect();
        GC.WaitForPendingFinalizers();

        Marshal.ReleaseComObject(ExlWs);        

        ExlWb.Close(Type.Missing, Type.Missing, Type.Missing);
        Marshal.ReleaseComObject(ExlWb);
Run Code Online (Sandbox Code Playgroud)

问题是:在工作期间,EXCEL进程在内存中成长,如何正确关闭工作簿?

c# asp.net iis excel office-automation

0
推荐指数
1
解决办法
390
查看次数

将HTML转换为word格式

我使用word自动化来创建word文档.我想在该文件中嵌入一些HTML代码.我应该如何将html标签转换为word文档格式?(我想在html中保留字体,粗体,表格和其他样式)

html c# asp.net office-automation

0
推荐指数
1
解决办法
8718
查看次数