【问题标题】:C# read multiple Excel files [closed]C#读取多个Excel文件[关闭]
【发布时间】:2012-10-05 20:45:50
【问题描述】:

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

【问题讨论】:

  • 是的。是的。
  • 只读取一个提取信息,并继续直到文件夹中的文件结束
  • 你一定是在开玩笑!两个赞成一个问题“可能从excel中提取一些信息?”
  • 这篇文章今天刚发,让我想起了你的问题:mssqltips.com/sqlservertip/4157/…

标签: c# excel


【解决方案1】:

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

然后您需要为 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# 变量,您可以按照自己的意愿使用这些信息。

【讨论】:

  • 因为我不知道文件夹中的文件数量和它们的名称,所以可以像这样获得它们的名称:string[] filePaths = Directory.GetFiles(@"c:\MyDir\" );并为数组中的每个路径创建工作簿..然后按照你的建议来提取信息
  • @SilviaStoyanova 当然,只需检查文件是否具有 xls 或 xlsx 扩展名并遍历它们
  • 该文件夹中不会有任何其他文件..但是你是对的,以防万一:)
【解决方案2】:

是的,如果你想在没有 Excel 互操作的情况下使用 ClosedXML,尽管它适用于 Excel 2007 +。

【讨论】:

  • 我建议epplus
  • 没试过,谢谢提示。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-08-20
    • 2013-03-23
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多