我试图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总是在一些奇怪的位置结束.
我做错了什么?
我是Word AddIns的新手,并尝试添加功能区组.对于每个RibbonGroup,我动态添加RibbonMenu,然后将RibbonButtons添加到组内的菜单.
我得到了地面工作,它似乎很好,但每当我访问任何集合
例如:group1.Items.add(new RibbonButton()); 它让我觉得Collection是ReadOnly.
但是当我调试时,Collection的IsReadOnly标志设置为False,这清楚地表明Collection不是readonly?
我错过了什么.
我们有一个管理打印文档的项目.起初我想知道为什么不能在一个地方设置打印选项.例如,可以使用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完全不清楚 …
我有以下代码:
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做事.
我们有一个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-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) 我正在从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,我可以这样做吗?
我试图替换页脚中的文本,我使用以下代码,通过它我可以替换正常内容(正文)但不替换页脚/标题中的内容
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)
任何帮助都非常感谢.提前致谢
VS 2008/C#.
在传递电子表格的文件路径时,我需要重命名工作表.
如何将Excel工作表的Sheet1重命名为"ABC".
我们将Excel工作表导出到SQL数据库.Excel工作表中的记录由最终用户手动编辑和更新.列值可以具有不同的数据类型.
默认情况下,电子表格将有三张表格作为Sheet1,Sheet2,Sheet3.
最终用户,通常在Sheet1上工作.我们需要为这个Sheet1维护一个静态名称,这有助于我们将Sheet1导出到SQL数据库.
如果我们将Sheet1重命名为ABC,我们将保持相同的名称.我们不能像那样导出默认表.因为,最终用户可能会更改其名称或坚持使用默认名称.
为了避免混淆,我们决定重命名Spread Sheet的Sheet1.
我在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进程在内存中成长,如何正确关闭工作簿?
我使用word自动化来创建word文档.我想在该文件中嵌入一些HTML代码.我应该如何将html标签转换为word文档格式?(我想在html中保留字体,粗体,表格和其他样式)