阅读大型Excel表格时优化内存
我有一个Excel文件,其中我开发了一种阅读表1中的所有内容的方式,并将其填充到一个列表视图,基本上工作表中的单元格数据AD。 但是数字是12万。 当我运行代码,它读取这些文件,需要时间,但在这个过程中,窗体上的任何操作,如最小化或单击窗体任何地方冻结程序,并导致它崩溃。 我怎样才能提高性能像任何好的程序呢。 这里是我的代码如下。
private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application ExcelObj = new Microsoft.Office.Interop.Excel.Application(); OpenFileDialog openFileDialog1 = new OpenFileDialog(); // prepare open file dialog to only search for excel files (had // trouble setting this in design view) openFileDialog1.FileName = "*.xlsx"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { // Here is the call to Open a Workbook in Excel // It uses most of the default values (except for the read-only // which we set to true) Workbook theWorkbook = ExcelObj.Workbooks.Open(openFileDialog1.FileName, 0, true, 5,"", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true); // get the collection of sheets in the workbook Sheets sheets = theWorkbook.Worksheets; // get the first and only worksheet from the collection of // worksheets Worksheet worksheet = (Worksheet)sheets.get_Item(1); // loop through 10 rows of the spreadsheet and place each row in // the list view for (int i = 1; i <= 10; i++) { Range range = worksheet.get_Range("A" + i.ToString(), "J" + i.ToString()); System.Array myvalues = (System.Array)range.Cells.Value; string[] strArray = ConvertToStringArray(myvalues); listView1.Items.Add(new ListViewItem(strArray)); } } } string[] ConvertToStringArray(System.Array values) { // create a new string array string[] theArray = new string[values.Length]; // loop through the 2-D System.Array and populate the 1-D String // Array for (int i = 1; i <= values.Length; i++) { if (values.GetValue(1, i) == null) theArray[i - 1] = ""; else theArray[i - 1] = (string)values.GetValue(1, i).ToString(); } return theArray; }
- 我不推荐使用OpenXML( https://github.com/OfficeDev/Open-XML-SDK )
- 并使用像BackgroundWorker的东西来读取背景中的文件( https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx )