我想从Excel到C#中的二维数组中读取大量单元格。使用Microsoft.Office.Interop.Excel并一一读取单元格太慢。我知道如何将数组写入范围(Microsoft.Office.Interop.Excel确实很慢),但我想朝相反的方向做
_Excel.Application xlApp = new _Excel.Application();
_Excel.Workbook xlWorkBook;
_Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlWorkBook = xlApp.Workbooks.Open(path);
xlWorkSheet = xlWorkBook.Worksheets["Engineering BOM"];
_Excel.Range range = (_Excel.Range)xlWorkSheet.Cells[1, 1];
range = range.get_Resize(13000, 9);
string[,] indexMatrix = new string[13000, 9];
// below code should be much faster
for (int i = 1; i < 1300; i++)
{
for (int j = 1; j < 9; j++)
{
indexMatrix[i, j] = xlWorkSheet.Cells[i, j].Value2;
}
}
结果,我想从数组中的单元格范围获取值(范围大小与数组大小完全相同)。现在,应用正在逐个单元读取数据并将数据写入数组,但这太慢了。有什么办法可以将整个范围直接复制到单元格吗?
先感谢您 :)
您可以尝试一下,它应该更快,但是:
您必须使用数据表(在这种情况下,最好使用数据表而不是多维数组。)
您不再需要关心范围。
那我们该怎么办?连接到excel并进行查询以选择所有数据并填充数据表。我们需要的?几行代码。
首先,我们声明连接字符串:
对于Excel 2007或更高版本(*.XLSX
文件)
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=No;IMEX=1\";", fullPath);
对于Excel 2003(*.XLS
文件)
string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";", fullPath);
fullPath
您的excel文件的完整文件路径在哪里
现在,我们必须创建连接并填充数据表:
OleDbConnection SQLConn = new OleDbConnection(strConnectionString);
SQLConn.Open();
OleDbDataAdapter SQLAdapter = new OleDbDataAdapter();
string sql = "SELECT * FROM [" + sheetName + "$]";
OleDbCommand selectCMD = new OleDbCommand(sql, SQLConn);
SQLAdapter.SelectCommand = selectCMD;
SQLAdapter.Fill(dtXLS);
SQLConn.Close();
工作sheetName
表名称在哪里,dtXLS
数据表中是否填充了所有excel值。
这应该更快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句