Good Afternoon Fellas,
我会感激一点建议,我正在接近一个问题,我需要编写一个代理程序,它将转到特定的文件目录,打开一个Excel工作簿(已经存在),然后将更改两个值单元格(始终是相同的单元格)是当前月份(在代理程序运行时)。
不幸的是,这是一个工作项目,因此VSTO是禁止的。然而,ExcelDNA,我以前用过。我不是在寻找某人“做我的工作”,但任何关于在哪里寻找或以前的例子的建议都会很棒。
如果有人能指出我的方向开始那将是一件好事,我已经捅了一下自己无济于事!
非常感谢。
答案 0 :(得分:1)
Excel-DNA非常棒,如果你想在.NET中创建一个带有用户定义函数等的Excel加载项。但听起来你只想从外部可执行文件中自动化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();
}
答案 1 :(得分:0)
如果您使用Excel 97或更高版本,我可以建议OpenXml Sdk
答案 2 :(得分:0)
现在大声思考excel现在有xml支持的文件格式(zipped),通过解析和重写xml或使用xml转换[shudder]来更容易做出这种改变。
现在使用VSTO的支持方式越多,但是你说它不可用。如果你进一步研究解析文件格式,请注意它是一个复杂的模式,你可以找到那些为你理解的源代码。
$ 0.02
答案 3 :(得分:0)
为什么不使用ExcelDNA?这可以使Excel文件更加独立于正在运行的代理程序。 如果存在将提供所需值的DLL(或甚至是DNA文件),则可以通过简单的函数来填充这两个单元。优点是,您不必先启动代理,只需打开工作簿即可。缺点是,必须在将打开工作簿的每台客户机上部署ExcelDNA.xll以及提供所需值所需的其他所有内容。或者,您必须在发布之前将此2个单元格的公式转换为实际值。在这种情况下,互操作解决方案可能会更好。
希望这有帮助。
干杯 Lothy