У меня есть настольное приложение, которое должно считывать данные из Excel в формате xlsx и затем отображать их.Моя программа работает нормально для небольшой записи.Но при попытке загрузить файл размером 6 МБ загрузка становится очень медленной, и приложение зависает до тех пор, пока в него не будут загружены все данные.Как избежать этой проблемы?
using System;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication7
{
public partial class Browse : Form
{
public Browse()
{
InitializeComponent();
}
private void buttonUpload_Click(object sender, EventArgs e)
{
string fname = "";
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "Excel File Dialog";
openFileDialog.InitialDirectory = @"c:\";
openFileDialog.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
fname = openFileDialog.FileName;
textBoxPath.Text = openFileDialog.FileName;
}
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fname);
Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange;
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
dgvDisplay.ColumnCount = colCount;//dgvDisplay:ID for data gridview to display the excel file
dgvDisplay.RowCount = rowCount;
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
//write the value to the Grid
if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
{
dgvDisplay.Rows[i - 1].Cells[j - 1].Value = xlRange.Cells[i, j].Value2.ToString();
}
// Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");
}
}
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(xlRange);
Marshal.ReleaseComObject(xlWorksheet);
xlWorkbook.Close();
Marshal.ReleaseComObject(xlWorkbook);
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);
}
}
}
Приложение не должно зависать при загрузке, т. Е. Кнопки прокрутки, креста и максимизации должны работать во время загрузки страницы Excel в виде сетки.