C#如何从excel中提取大数据
本文讲述如何从excel中提取数据,以及如何提取大数据的方法。
操作方法
- 01
1.添加引用Microsoft.Office.Interop.Excel 并引用using Microsoft.Office.Interop.Excel;
- 02
2.初始化环境 System.Reflection.Missing miss = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application applicationExcel = new Microsoft.Office.Interop.Excel.Application();applicationExcel.Visible = false;this.m_workBook = applicationExcel.Application.Workbooks.Open(excelFilePath, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss);//excelFilePath是所要打开的excel的文件路径+文件名
- 03
3.获取excel文件里的sheet名,并显示(此步可跳过,如果不想获取sheet名可以跳过) for (int tableIndex = 1; tableIndex <= m_workBook.Worksheets.Count; tableIndex++){ Worksheet workSheet = (Worksheet)this.m_workBook.Worksheets.get_Item(tableIndex); this.m_comboBoxChooseTableName.Items.Add(workSheet.Name);} //this.m_comboBoxChooseTableName是示例中显示sheet名的控件,是一个combox
- 04
4.从this.m_comboBoxChooseTableName中获取选中的sheet表,并提取行列数 Int32 sheetIndex = this.m_comboBoxChooseTableName.SelectedIndex;//获取combox的当前选择项索引Worksheet workSheet = (Worksheet)this.m_workBook.Worksheets.get_Item(sheetIndex + 1);//根据索引获取sheet表Int32 rowCount = workSheet.UsedRange.Cells.Rows.Count;//获取当前表中数据行数Int32 columnCount = workSheet.UsedRange.Cells.Columns.Count;//获取当前表中数据列数
- 05
5.新建方法用来提取所需要的数据并存储到二维数组中 ( object[,] m_objValue为了方便调用,故而设置为全局二维数组) private void SetRange(Int32 startRow, Int32 endRow, Int32 columnCount, Worksheet workSheet)//startRow是所提取的数据范围的起始行,endRow是所提取的数据的终止行,columnCount是多少列数据,workSheet是所提取的sheet表。Range是excel用来表示范围的,可以是一行,也可以是一列,更可以是一块儿区域数据。 { Range startCell = (Range)workSheet.Cells[startRow, 1];Range endCell = (Range)workSheet.Cells[endRow, columnCount];Range range = workSheet.get_Range(startCell, endCell);this.m_objValue = null;//清空此二维数组this.m_objValue = (object[,])range.get_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault);//将range里的值赋给二维数组,此时将数组中的值赋给二维数组后,就可直接提取数据,无论是存储还是显示,已经无须赘述了。}
- 06
6.多次提取数据(如果是大数据不可能一次就提取出来,那么我们就需要多次提取,本文以八十三万数据为例,十万提取一次作为示例)此处代码跟在步骤4后面即可 for (Int32 RowsIndex = 0; RowsIndex <= (rowCount /100000); RowsIndex++) { Int32 currentCount = (RowsIndex) * c_eachReadRecordCount + 1; SetRange(currentCount, (RowsIndex + 1) * c_eachReadRecordCount, columnCount, workSheet); }