2017-02-11 1 views
0

두 개의 테이블 (데이터를 선택하고 형식을 테이블로 선택하고 이름을 지정했습니다)이있는 Excel 문서가 있습니다.엑셀 문서에서 "테이블"목록을 얻으려고 시도합니다.

통합 문서를 열고 문서 내의 모든 테이블을 가져 오려고합니다.

다음 코드는 통합 문서에서 여러 섹션을 반환하지만 특정 테이블을 반환하지는 않습니다.

이것이 가능합니까?

public partial class Form1 : Form 
{ 
    private DataSet _excelDataSet; 

    public Form1() 
    { 
     InitializeComponent(); 


     var filePath = "c:\\temp\\orderforms\\SampleOrder.xlsx"; 

     var tmpName = Path.GetTempFileName() + Path.GetExtension(filePath); 
     File.Copy(filePath, tmpName); 
     filePath = tmpName; 


     var excelReader = GetExcelDataReader(filePath, true); 
     excelReader.IsFirstRowAsColumnNames = true; 

     _excelDataSet = excelReader.AsDataSet(); 

    } 

    private static IExcelDataReader GetExcelDataReader(string path, bool isFirstRowAsColumnNames) 
    { 
     using (var fileStream = File.Open(path, FileMode.Open, FileAccess.Read)) 
     { 
      IExcelDataReader dataReader; 

      if (path.EndsWith(".xls")) 
       dataReader = ExcelReaderFactory.CreateBinaryReader(fileStream); 
      else if (path.EndsWith(".xlsx")) 
       dataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream); 
      else 
       throw new FileToBeProcessedIsNotInTheCorrectFormatException("The file to be processed is not an Excel file"); 

      dataReader.IsFirstRowAsColumnNames = isFirstRowAsColumnNames; 

      return dataReader; 
     } 
    } 

    private void btnLoadOrder_Click(object sender, EventArgs e) 
    { 

     DataTable dt1 = _excelDataSet.Tables[Convert.ToInt32(textBox1.Text)]; 

     dataGridView2.DataSource = dt1; 
     MessageBox.Show(dt1.TableName); 
    } 

}

답변

0
var excel = new ExcelQueryFactory(); 
excel.FileName = "c:\\temp\\orderforms\\orderform.xlsx"; 
var order = from x in excel.NamedRange<SunglassesOrder>("Order") 
        where x.Qty!="" 
        select x; 
dataGridView1.DataSource = order.ToList(); 
0

사용 linqtoexcel 라이브러리. 이 라이브러리를 사용하는 방법에 대한 예제를 쉽게 찾을 수 있습니다.

+0

감사 Jaykumar, 이것은 = var에 탁월한 새로운 ExcelQueryFactory() 내 작업 버전입니다; excel.FileName = "c : \\ temp \\ orderforms \\ my order form.xlsx"; var order = from x in excel.NamedRange ("주문") 여기서 x.Qty! = "" select x; dataGridView1.DataSource = order.ToList(); – Jimmy

관련 문제