2017-10-19 134 views
1

我确实有一个excel文件,其中我开发了一种读取表格1中所有内容并将其填充到列表视图中的方式,基本上该表格在单元格A-D中具有数据。但是数字是12万。当我运行代码时,它确实会读取这些文件,但需要时间,但在此过程中,窗体上的任何操作(如最小化或单击窗体上的任意位置)会冻结程序并导致程序崩溃。我如何能像任何好的程序一样提高性能。这里是我的代码如下。在阅读大型Excel表格时优化内存

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; 
    } 

回答