C#读取多个Excel文件

Sil*_*ova 6 c# excel

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

JMK*_*JMK 8

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

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

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
Run Code Online (Sandbox Code Playgroud)

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

Excel.Application application = new Excel.Application();
Run Code Online (Sandbox Code Playgroud)

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

Excel.Workbook workbookOne;
Excel.Workbook workbookTwo;
Excel.Workbook workbookThree;
Run Code Online (Sandbox Code Playgroud)

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

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

现在,您需要确定要提取的信息.完成后,确定它所在的工作簿中的哪个工作表,然后通过查看选项卡并计算来计算出数字.在下面的示例中,Sheet2为数字1,Sheet1为数字2,Sheet3为数字3:

例

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

string firstPieceOfInformationINeed;
string[] secondPieceOfInformationINeed;
double? thirdPieceOfInformationINeed;
Run Code Online (Sandbox Code Playgroud)

假设我们需要的第一条信息是工作簿1中的第一张单元格中的字符串,第二部分是工作表2中工作表2中的单元格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?;
Run Code Online (Sandbox Code Playgroud)

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

workbookOne.Close(true);
workbookTwo.Close(false);
workbookThree.Close(true);
Run Code Online (Sandbox Code Playgroud)

现在退出应用程序:

application.Quit();
Run Code Online (Sandbox Code Playgroud)

并释放COM对象:

Marshal.ReleaseComObject(application);
Run Code Online (Sandbox Code Playgroud)

现在您已经完成了Excel,并且需要将所有不同的信息存储为C#变量,并且您可以使用这些信息.