7

是否可以制作一个从文件夹中读取多个 excel 文件并从中提取一些信息的应用程序?

4

3 回答 3

8

是的,这是使用 Interop 的方法。您需要做的第一件事是将 Excel 互操作库添加到您的项目中。为此,您可以创建一个新的 Visual Studio 解决方案,右键单击References,选择Add Reference,然后从 .NET 选项卡中选择Microsoft.Office.Interop.Excel 。

然后您需要为 Excel 添加一条 using 语句,并为 InteropServices 添加一条语句(因为我们正在与 COM 对象进行互操作):

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

然后,在方法内部,您需要创建一个Application对象:

Excel.Application application = new Excel.Application();

接下来,为您要读取的每个工作簿创建一个Workbook对象,如下所示:

Excel.Workbook workbookOne;
Excel.Workbook workbookTwo;
Excel.Workbook workbookThree;

现在使用 Application 对象打开每个工作簿,并将每个工作簿加载到其各自的 Workbook 对象中:

workbookOne = application.Workbooks.Open(@"C:\workbookOneLocation.xlsx");
workbookTwo = application.Workbooks.Open(@"C:\workbookTwoLocation.xlsx");
workbookThree = application.Workbooks.Open(@"C:\workbookThreeLocation.xlsx");

现在您需要决定要提取哪些信息。完成此操作后,确定它在工作簿中的哪个工作表上,然后通过简单地查看选项卡并计数来找出数字。在下面的示例中,Sheet2是 1 号,Sheet1是 2 号,Sheet3是 3 号:

例子

像这样为您需要的每条信息创建一个变量(任何值类型变量都需要可以为空):

string firstPieceOfInformationINeed;
string[] secondPieceOfInformationINeed;
double? thirdPieceOfInformationINeed;

假设我们需要的第一条信息是第一工作簿内第一张工作表上的单元格 A1 中的字符串,第二条是第二工作簿内第二工作表上的单元格 B2 - B4,第三条是工作表上单元格 C5 上的数字三里面的工作簿三。我们会这样做:

string firstPieceOfInformationINeed;
string[] secondPieceOfInformationINeed;
double? thirdPieceOfInformationINeed;

Excel.Worksheet worksheet;
Excel.Range range;

worksheet = workbookOne.Sheets[1];
range = worksheet.Cells["1", "1"];

firstPieceOfInformationINeed = range.Value as string;

worksheet = workbookTwo.Sheets[2];
range = worksheet.Range["B2", "B4"];

secondPieceOfInformationINeed = range.Value as string[];

worksheet = workbookThree.Sheets[3];
range = worksheet.Cells["3", "5"];

thirdPieceOfInformationINeed = range.Value as double?;

然后我们关闭工作簿,使用一个布尔值来指示我们是否要保存更改:

workbookOne.Close(true);
workbookTwo.Close(false);
workbookThree.Close(true);

现在退出应用程序:

application.Quit();

并释放 COM 对象:

Marshal.ReleaseComObject(application);

现在您已经完成了 Excel 的使用,并将所需的所有不同信息都存储为 C# 变量,您可以按照自己的意愿使用这些信息。

于 2012-10-05T12:22:02.100 回答
0

是的,如果你想在没有 Excel Interop 的情况下使用它,你可以使用 ClosedXML,尽管它可以与 Excell 2007 + 一起使用。

于 2012-10-05T12:00:33.373 回答
0

尝试使用 NPOI (http://npoi.codeplex.com/) 或 NetOffice (http://netoffice.codeplex.com/) 库

于 2012-10-05T12:03:50.357 回答