0

ワークシートの最後の行を取得するために、C# の相互運用 Excel オブジェクトを介して UsedRange を使用しています。Name プロパティのみが編集されたワークシートが新しく作成されます。しかし、ws.UsedRange.Rows.Count を取得すると、10k を超えます。これが0または1を与えないのはなぜですか? 真の最後の行を取得するにはどうすればよいですか?

Application xlApp = null;
            Worksheet temp;
            Range cell;
            int row;
            int col;
            int i;
                xlApp = new Application();
                xlApp.Visible = true;
                Workbook wbDetail = xlApp.Workbooks.Add();
                wbDetail.Worksheets.Add(Type.Missing, Type.Missing, 26, XlWBATemplate.xlWBATWorksheet);  
                i = 0;
                while(i < 29)
                {
                    temp = (Worksheet)wbDetail.Worksheets[i+1];
                    temp.Name = "TITLE_"+i
                    i++;
                }

         DateTime reqdate;
         i=0;
         while(i<29)
                {
                        temp = (Worksheet)wbDetail.Worksheets["TITLE_"+i];
                        int j = 0;
                        temp.get_Range("A1", Type.Missing).Value = "TITLE STUFF";
                        row = temp.UsedRange.Rows.Count;
                        while(j < 50)
                        {
                            cell = (Range)temp.Cells[row+1, j+1];
                            cell.Value = j;
                            j++;
                        }
                    }
                   i++
                }
                wbDetail.Save();
4

1 に答える 1

1

特定の条件下 (それらが何であるかわからない) では、Excel には、実際の値 (空白、null などを除く) を持たない "使用済み" 行があります。

私が過去にこれを行った方法は、シートの値を配列*にロードし、列の1つに空白以外の値が含まれるまで配列の行を逆方向にループすることです。

Cells[i,j]*-ループ内で呼び出さないことを強くお勧めします。値を配列にロードしてから、配列をループします。

var tempValues = temp.Value;
...
while(j < 50)
{
    tempValues[row+1, j+1] = j
    j++;
}
temp.Value = tempValues
于 2012-10-03T20:21:10.423 に答える