C#读取多个Excel文件

时间:2012-10-05 11:57:52

标签: c# excel

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

3 个答案:

答案 0 :(得分:8)

是的,这是使用Interop的方式。您需要做的第一件事是将Excel Interop库添加到项目中。您可以通过创建新的Visual Studio解决方案,右键单击引用,选择添加引用,然后选择 Microsoft.Office.Interop.Excel 从.NET选项卡。

然后你需要为Excel添加一个using语句,为InteropServices添加一个(因为我们正在使用COM对象):

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

然后,在方法中,您需要创建应用程序对象:

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

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

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:

Example

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

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#变量,您可以使用这些信息。

答案 1 :(得分:0)

是的,如果你想要没有Excel Interop,你可以使用ClosedXML,尽管它适用于excell 2007 +。

答案 2 :(得分:0)

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