1

各位下午好,

一点建议将不胜感激,我正在解决一个问题,我需要编写一个代理,该代理将转到一个特定的文件目录,打开一个 Excel 工作簿(已经存在),然后更改两个单元格的值(其中总是相同的单元格)成为当前月份(在代理运行时)。

不幸的是,这是一个工作项目,所以 VSTO 是禁区。然而,ExcelDNA,我以前用过。我不是在寻找“做我的工作”的人,但任何关于在哪里寻找或以前的例子的建议都会很棒。

我已经在自己周围戳了一下无济于事,如果有人能指出我开始的好方向,那就太好了!

非常感激。

4

4 回答 4

1

如果您想在 .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();
}
于 2012-01-11T08:43:10.657 回答
0

如果您使用 Excel 97 或更高版本,我可以建议使用OpenXml Sdk

于 2012-01-10T14:52:02.740 回答
0

只是用 excel 现在有 xml 支持的文件格式(压缩)大声思考,通过解析和重写 xml 或使用 xml 转换 [颤抖] 可能更容易进行此更改。

现在更受支持的方法是使用 VSTO,但你说那不可用。如果您进一步研究文件格式的解析,请注意它是一个复杂的模式,您可能会找到可以为您理解的源代码。

0.02 美元

于 2012-01-10T14:54:51.900 回答
0

为什么不使用 ExcelDNA?这可以使 Excel 文件更加独立于正在运行的代理。如果有一个 DLL(甚至是 DNA 文件)可以提供所需的值,那么这两个单元格可以由一个简单的函数填充。优点是,您不必先启动代理,只需打开工作簿即可。缺点是 ExcelDNA.xll 和您需要提供所需值的所有其他内容,必须部署在将打开工作簿的每台客户端计算机上。或者您必须在发布之前将这 2 个单元格的公式转换为实际值。在这种情况下,互操作解决方案可能会更好。

希望这可以帮助。

干杯乐蒂

于 2012-06-12T20:25:07.290 回答