2014-03-24 35 views
0

我使用下面的代碼從Excel工作表數據的Excel工作表名稱: -怎樣用數據表在c#

private static DataTable GetDataFromCSVFile(string csv_file_path) 
    { 
     DataTable csvData = new DataTable(); 
     using (TextFieldParser csvReader = new TextFieldParser(csv_file_path)) 
     { 
      csvReader.SetDelimiters(new string[] { "," }); 
      csvReader.HasFieldsEnclosedInQuotes = true; 
      string[] colFields = csvReader.ReadFields(); 
      foreach (string column in colFields) 
      { 
       DataColumn datecolumn = new DataColumn(column); 
       datecolumn.AllowDBNull = true; 
       csvData.Columns.Add(datecolumn); 
      } 
      while (!csvReader.EndOfData) 
      { 
       string[] fieldData = csvReader.ReadFields(); 
       //Making empty value as null 
       for (int i = 0; i < fieldData.Length; i++) 
       { 
        if (fieldData[i] == "") 
        { 
         fieldData[i] = null; 
        } 
       } 
       csvData.Rows.Add(fieldData); 
      } 
      return csvData; 
     } 
    } 

,但我需要檢索來自同一工作簿中的表一樣。任何想法我怎麼能做到這一點在C#中使用數據表。

由於

+2

您正在閱讀excel文件或csv? Csv只是純文本,不是? – lavrik

+0

這與NUnit有什麼關係? –

+2

您的代碼建議您解析的文件只是一個純文本CSV文件。如果是這樣的話,那麼沒有標籤名稱得到 – dave823

回答

0

「作爲在Excel工作表的用戶輸入數據」並不意味着輸入到XLS或xlsx檔案。這可能意味着用戶使用MS Excel編輯CSV。您可以使用來自4個源CSV文件的數據創建「真正的Excel」文件並讀取新的單個文件,但您需要另一個API,而不是TextFieldParser。要讀取新的xlsx文件,我使用DocumentFormat.OpenXml程序集。快速樣品是

 using (var doc = SpreadsheetDocument.Open(_docPath, false)) 
     { 
      var sheet = doc.WorkbookPart.Workbook.Sheets.Elements<Sheet>().First() 
      //Or iterate over all sheets, get sheet name, read it's data etc. 
      //i'm sure you can find a lot of samples 
      var worksheetPart = (WorksheetPart)doc.WorkbookPart.GetPartById(sheet.Id); 
      var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); 

      foreach (var row in sheetData.Elements<Row>()) 
      { 
        //some code here 
      } 
     } 
相關問題