2013-09-04 2 views
0

Excel 시트의 행 수가 데이터로 채워지는 행 즉, 비어 있지 않은 행을 세밀하게 정렬해야한다는 요구 사항이 있습니다. 나는 C#을 사용하여 그것을 할 필요가있다. Excel 시트에서 마지막으로 채워진 행 찾기 C#

가 현재 나는 다음과 같은 코드를 사용하고 있습니다 :

Excel.Application excelApp = new Excel.Application(); 
      string workbookPath = "C:\\ScriptTest\\bin\\Debug\\SDownloadScripts\\ExcelResult.xlsx"; 
      Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 
     0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", 
     true, false, 0, true, false, false); 
      Excel.Sheets excelSheets = excelWorkbook.Worksheets; 
      string currentSheet = "Sheet1"; 
      Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet); 
      //long i = excelWorksheet.UsedRange.Rows.Count; 
      int lastUsedRow = excelWorksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, 

Type.Missing).Row; 
      return lastUsedRow; 
     } 

내 시트가 작성 네 개의 행이하지만 난 65536을 받고 난 일부 데이터로 채워진 행없이 즉 결과로 4가 필요합니다. 제발 제안 해주세요.

+0

Excel에서는 스타일이 적용된 경우 셀을 비어 있지 않은 것으로 간주합니다. 나는 그렇지 않았 으면 좋겠지 만 그것은 그것이하는 일이다. –

답변

3

이 시도 ..

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\xxxxxx\Desktop\1-8-13-ct.xlsx';Extended Properties=Excel 12.0;Persist Security Info=False"; 
    //Create Connection to Excel work book 
    OleDbConnection excelConnection =new OleDbConnection(excelConnectionString); 
    //Create OleDbCommand to fetch data from Excel 
    OleDbCommand cmd = new OleDbCommand("select count(*) from [Sheet1$]", excelConnection); 
    con.Open(); 
    int rows = (int)cmd.ExecuteScalar(); 
    con.Close(); 
+0

Arbaaz에게 감사드립니다. 많은 노력을 기울인 결과, 당신의 솔루션은 많은 도움이되었습니다. – priya

+0

환영합니다. 나는 어떤 도움이 될 수있어 기쁘다. :) – Arbaaz

0

개인 데이터 집합 CreateDataSource (문자열 strFilePath, 문자열 strSheetName) { 데이터 집합 MyDataSet로를; myDataSet = null; 가 아닌 빈 행을 얻을 수 있도록 당신이 조회 할 수 있습니다 위의 코드를 사용하기위한 {

 if (strSheetName.Length > 0) 
     { 
      StringBuilder strConnectionString = new StringBuilder(); 
      strConnectionString.AppendFormat("Provider={0};", "Microsoft.ACE.OLEDB.12.0"); 
      strConnectionString.AppendFormat("Data Source={0};", strFilePath); 
      strConnectionString.Append("Extended Properties="); 
      strConnectionString.Append(((char)34).ToString()); //start of trickypart 
      strConnectionString.Append("Excel 12.0 Xml;"); 
      // always treat contents of cells as text, which gives us full control/responsibility for casting to numeric when ncessary 
      strConnectionString.Append(((char)34).ToString()); // end of tricky part 
      string str = strConnectionString.ToString(); 

      OleDbConnection conn = new OleDbConnection(str); 

      OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + strSheetName + "$] where QuestionDescription <>''", str); 
      myDataSet = new DataSet(); 
      myCommand.Fill(myDataSet); 
     } 
     else 
     { 
      trError.Visible = true; 
      lblError.Text = "File is Invalid format"; 
     } 
    } 
    catch 
    { 
     trError.Visible = true; 
     lblError.Text = "Invalid format!!"; 
    } 
    return myDataSet; 
} 

을 시도합니다. 결과는 데이터 세트에 저장됩니다. 데이터 세트에서 비어있는 셀 수를 얻을 수 있습니다. 이 코드 작업을 수행하려면 "Microsoft.ACE.OLEDB.12.0"공급자를 사용해야합니다.

0

비슷한 질문을하는 일부 스레드가 stackoverflow에 있습니다. 어쩌면 이것들은 이미 당신의 질문을 해결할 것입니다. This answer 님이 찾고있는 것 같습니다.

귀하의 결과에 따라 XlCelltype에 대한 문서와 주석 처리 된 행은 시트의 usedRange가 실제로 사용 된 영역보다 큰 것으로 가정합니다. 다른 솔루션이 작동하지 않고 데이터 행 사이에 빈 행이없는 경우 빈 셀 (이 행 -1은 필요한 행 개수보다 커야 함)이있는 열의 첫 번째 행을 검색하려고 시도 할 수 있습니다.

관련 문제