0
private void btnImportFromxls_Click(object sender, RoutedEventArgs e)
    {
        Excel.Application myapp = new Excel.Application();
        Excel.Workbook wb = myapp.Workbooks.Open(@"D:\MyExcel.xls");
        Excel.Worksheet sheet = (Excel.Worksheet)wb.Worksheets.get_Item(1);
        Dictionary<object, object> dictionary = new Dictionary<object, object>();
        for (int i = 1; i < sheet.UsedRange.Rows.Count; i++)
        {
            object key = ((Excel.Range)sheet.Cells[i, 1]).Value2;
            object value = ((Excel.Range)sheet.Cells[i, 2]).Value2;

            dictionary.Add(key,value);
        }
    }

8,000 行のデータを持つ Excel ファイル (MyExcel.xls)。上記のコードでデータをディクショナリにロードしようとすると、Excel データをディクショナリにロードするのに時間がかかります。辞書へのデータのロードを高速化する他の方法はありますか?

4

1 に答える 1

1

これは、範囲内のすべてのセルを反復するよりも高速です。

using XLS = Microsoft.Office.Interop.Excel;

object[,] arrWks;
object objKom;
string strKom;

arrWks = (object[,])sheet.UsedRange.get_Value(XLS.XlRangeValueDataType.xlRangeValueDefault);

for (int intRow=arrWks.GetLowerBound(0); intRow<=arrWks.GetUpperBound(0); intRow++)
{
    for (int intCol=arrWks.GetLowerBound(1); intCol<=arrWks.GetUpperBound(1); intCol++)
    {
        objKom = arrWks[intRow, intCol];
        strKom = objKom == null ? "" : objKom.ToString();       

        //do rest of your logic here
    }
}

arrWks 全体を反復する代わりに、指定された列だけを反復することもできます。

于 2013-03-21T13:01:19.287 に答える