2012-10-05 289 views
4

是否可以創建一個從文件夾中讀取多個excel文件並從中提取一些信息的應用程序?C#讀取多個Excel文件

+7

是的。是的。 – JMK

+0

剛剛讀取一個提取信息,並繼續,直到文件夾中的文件結束 –

+1

您一定是在開玩笑!兩個upvotes的問題_「可能從excel中提取一些信息?」_ –

回答

7

是的,這裏是如何使用互操作。您需要做的第一件事是將Excel Interop庫添加到您的項目中。您可以通過創建一個新的Visual Studio解決方案來執行此操作,請右鍵單擊參考文獻,選擇添加引用,然後從.NET選項卡中選擇Microsoft.Office.Interop.Excel

然後,你需要添加一個using語句爲Excel,一個用於InteropServices(因爲我們有一個COM對象interoping):

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對象每一個打開每個工作簿,並加載到其相應的工作簿對象:

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

現在你需要決定你要提取的信息。完成此操作後,可以確定工作簿中的哪個工作表,然後通過查看選項卡和計數來計算出該數字。在下面的例子中,Sheet 2中是數字1,Sheet 1中是數字2和表Sheet 3是編號3:

Example

對於每一條信息,你需要像這樣創建一個變量(任何值類型變量將需要可爲空的):

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

假設的信息的第一塊我們需要的是在單元格A1的字符串上一個片裏面的工作簿之一,第二部分是工作表2中的單元格B2 - B4位於工作簿2內部,而第三部分是工作表3中工作表3中工作表單元格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#變量,並且您可以根據自己的意願完成這些任務。

+0

因爲我不知道一個文件夾中的文件的數量和他們的名字將有可能獲得他們的名字,如:string [] filePaths = Directory.GetFiles(@「c:\ MyDir \」);併爲陣列中的每個路徑創建工作簿..然後做你建議提取信息 –

+1

@SilviaStoyanova當然,只需檢查文件是否有xls或xlsx擴展名並循環遍歷它們 –

+0

那裏不會有任何其他文件該文件夾..但是,你是正確的,以防萬一:) –

0

是的,如果你想不使用Excel Interop,你可以使用ClosedXML,但它可以與excell 2007 +一起使用。

+0

我會建議[** epplus **](http://epplus.codeplex.com/releases/view/42439)。 –

+0

從未嘗試過,感謝您的提示。 – Freeman

0

嘗試使用NPOI(http://npoi.codeplex.com/)或NetOffice(http://netoffice.codeplex.com/)庫