我们可以在C#for Excel中编写一个宏吗?

时间:2010-09-03 08:31:27

标签: c# excel

我必须在excel中遍历大约25张才能进行操作。我正在使用vba并且发现它非常慢,因此想知道我是否可以使用C#,如果这样做会帮助我加快这个过程。

5 个答案:

答案 0 :(得分:38)

从Excel工作簿中调用C#,如VBA宏 - 你不能

从C#应用程序访问Excel工作簿 - 您可以。这称为Microsoft Visual Studio Tools for Office(VSTO

答案 1 :(得分:10)

虽然您可以使用VSTO将C#中的等效编写为当前的VBA宏,但我很怀疑它是否会对性能产生重大影响。

在这两种情况下,您将操作相同的Excel COM对象,执行时间可能非常相似。

您的表现主要取决于您用来操纵Excel对象的技巧。举一个简单的例子,您可以在一个语句中将Excel范围中的值分配给二维数组:这比迭代代码中的行和列并逐个将值复制到数组中要快得多。

我建议你发布一些你发现太慢的VBA代码,并询问有关提高性能的提示。

答案 2 :(得分:5)

您可以尝试使用我的ESharper加载项在C#中编写Excel自动化命令。它比创建单独的C#应用​​程序或加载项更容易,您可以访问Excel对象模型和Excel C API,并提供更多选项以进行性能优化。

答案 3 :(得分:0)

使用C#与Excel配合使用会带来一些强大的自动化功能!

我建议为您的C#项目使用免费的开源EPPlus library。与Microsoft.Office.Interop C#库相比,该库带来了很多好处(包括速度快,无需安装Excel)

这是遍历工作表的C#代码

// excel file reference
var fileName = @"C:\Temp\traversing_worksheets.xlsx";
var file = new FileInfo(fileName);

// lets open the file using EPPlus
using (var excelFile = new ExcelPackage(file))
{
     // get all the worksheets
     var worksheets = excelFile.Workbook.Worksheets;
     // traverse worksheets & print out name to console
     foreach (var ws in worksheets)
     {
        Console.WriteLine(ws.Name);
     }

 }

这是C#Visual Studio项目中的实时代码实现:

enter image description here (来源:www.excel-automation-guide.com

注释: 您可以通过从Visual Studio中的Package Manager控制台运行Install-Package EPPlus来安装此免费的开源库。 (*)我与EPPlus没有关联,但是发现它是最好的库。

enter image description here

答案 4 :(得分:-1)

您正在做什么操作?首先,你不需要自己编写VBA代码。您只需在工作簿中录制宏并将其保存在C:\ Program Files \ Microsoft Office \ Office12 \ Xlstart中。 Excel将记录一个宏并使其在您打开的所有工作表中可用。

您还可以在上述过程中调整自动生成的VBA代码以满足您的需求。

就个人而言,我不认为编写C#加载项来完成工作会加快任务。 VBA是专门用于处理Office对象模型的语言。如果这不够快,那么你需要看看你正在进行什么操作?

我认为创建一个C#加载项来操作Excel对象模型并维护它是太多了。它还将涉及一个很大的学习曲线。