0

次のように、単純なコードを使用して、Excel に文字列のリストを記述しています。

        Excel.Application excelApp = new Excel.Application();
        string myPath = Environment.CurrentDirectory + path + "\\reselts.xlsx";
        excelApp.Workbooks.Open(myPath);

        List <string> allterms = new List<string>(alltext.Split(' '));

         allterms= allterms.Distinct().ToList();
        allterms.RemoveAll(String.IsNullOrEmpty);

        for (int i = 1; i < allterms.Count + 1; i++ )
        {

            excelApp.Cells[i, 1] = allterms[i];

        }
        excelApp.Visible = true;

しかし、「インデックスが範囲外です」というエラーが発生しました!私の手順の何が問題になっていますか? 助けてください。

4

2 に答える 2

1

Excel では、すべてのインデックスは 1 ベースです。C# では、すべてのインデックスは 0 ベースです。コードでは、Excel とリストの両方に 1 ベースのアクセス モデルを使用しているように見えます。

また、挿入速度を上げるには、セルごとではなく、範囲ごとに値を設定した方がよいでしょう。私がここに持っている例を見ることができます: http://outcoldman.com/en/blog/show/201

于 2013-03-16T18:50:06.150 に答える
1

allterms.Count内のアイテムの総数Listです。あなたのループはCount + 1、存在しない にアクセスしようとしています。

たとえば、 に 10 個のアイテムがあるとしalltermsます。合計は に等しく10、インデックスの範囲は0 - 9です。これは 10 アイテムです。for ループで行っていることは、 index range のアイテムにアクセスすることです。1 - 10これは、アイテムをスキップし、存在しないindex 0アイテムにアクセスしようとしています。index 10

これを試して:

for (int i = 0; i < allterms.Count; i++ )
{
    excelApp.Cells[i + 1, 1] = allterms[i];
}
于 2013-03-16T18:47:41.733 に答える