我要求精确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 :(得分: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();
答案 1 :(得分:0)
private DataSet CreateDataSource(string strFilePath,string strSheetName) { DataSet 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”提供程序。
答案 2 :(得分:0)
我发现stackoverflow上的一些线程提出了类似的问题。也许这些已经解决了你的问题。 This answer似乎就是你要找的东西。
根据您的结果,XlCelltype的文档和已注释的行I假设工作表中的usedRange大于实际使用的区域。如果其他解决方案不起作用并且您的数据行之间没有空行,您可以尝试搜索具有空单元格的列中的第一行(此行-1应该是您需要的行数)。