各位下午好,
一点建议将不胜感激,我正在解决一个问题,我需要编写一个代理,该代理将转到一个特定的文件目录,打开一个 Excel 工作簿(已经存在),然后更改两个单元格的值(其中总是相同的单元格)成为当前月份(在代理运行时)。
不幸的是,这是一个工作项目,所以 VSTO 是禁区。然而,ExcelDNA,我以前用过。我不是在寻找“做我的工作”的人,但任何关于在哪里寻找或以前的例子的建议都会很棒。
我已经在自己周围戳了一下无济于事,如果有人能指出我开始的好方向,那就太好了!
非常感激。
如果您想在 .NET 中使用用户定义的函数等制作 Excel 插件, Excel-DNA非常棒。但听起来您只是想从外部可执行文件自动化 Excel。
为此,最容易直接安装和引用主互操作程序集 (PIA),您可以在此处找到:http: //www.microsoft.com/download/en/details.aspx?id=3508,或者您可以使用辉煌NetOffice项目中与版本无关的互操作程序集。
在这两种情况下,您都制作了一个 VB.NET 或 C# 控制台应用程序,然后添加对您选择的互操作程序集的引用,然后就可以离开了。
在 C# 中,您使用 NetOffice 的方法可能会像这样开始(我认为在 C# 4 中它可能更简洁一些):
static void Test()
{
// Initialize Api COMObject Support
LateBindingApi.Core.Factory.Initialize();
// start excel and turn off msg boxes
Excel.Application excelApplication = new Excel.Application();
excelApplication.DisplayAlerts = false;
// add a new workbook
Excel.Workbook workBook = excelApplication.Workbooks.Add();
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets[1];
worksheet.get_Range("A1").Value = "XXX";
// save the book
string fileExtension = GetDefaultExtension(excelApplication);
string workbookFile = string.Format("{0}\\Example01{1}",
Application.StartupPath, fileExtension);
workBook.SaveAs(workbookFile, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, XlSaveAsAccessMode.xlExclusive);
// close excel and dispose reference
excelApplication.Quit();
excelApplication.Dispose();
}
如果您使用 Excel 97 或更高版本,我可以建议使用OpenXml Sdk
只是用 excel 现在有 xml 支持的文件格式(压缩)大声思考,通过解析和重写 xml 或使用 xml 转换 [颤抖] 可能更容易进行此更改。
现在更受支持的方法是使用 VSTO,但你说那不可用。如果您进一步研究文件格式的解析,请注意它是一个复杂的模式,您可能会找到可以为您理解的源代码。
0.02 美元
为什么不使用 ExcelDNA?这可以使 Excel 文件更加独立于正在运行的代理。如果有一个 DLL(甚至是 DNA 文件)可以提供所需的值,那么这两个单元格可以由一个简单的函数填充。优点是,您不必先启动代理,只需打开工作簿即可。缺点是 ExcelDNA.xll 和您需要提供所需值的所有其他内容,必须部署在将打开工作簿的每台客户端计算机上。或者您必须在发布之前将这 2 个单元格的公式转换为实际值。在这种情况下,互操作解决方案可能会更好。
希望这可以帮助。
干杯乐蒂