2016-03-26 5 views
0

私のコードで達成しようとしているのは、あるワークシートのすべてのセルを別のワークシートにコピーすることです。それは簡単なブロック「列番号は1から16384の間でなければならない」というエラーが表示される理由は何ですか?

// find the index of the first empty row and column in the dumped file 
int m = 1; while (!wb.Worksheet(3).Cell(m,1).IsEmpty()) ++m; 
int n = 1; while (!wb.Worksheet(3).Cell(1,n).IsEmpty()) ++n; 
// copy from dumped file into raw data file 
for (int i = 1; i < m; ++i) 
{ 
    for (int j = 1; i < n; ++j) 
    { 
     wb.Worksheet(1).Cell(i,j).Value = wb.Worksheet(3).Cell(i,j).Value; 
    } 
} 

で、何とかこれがエラーを投げている

列番号は1と16384

の間でそれは可能性があり、なぜすべてのアイデアでなければなりませんか?無限ループやそのようなものは見当たりません。

+0

「m」と「n」の値をログアウトする必要があります。 – poke

+0

@pokeこれはウェブアプリケーションなので、値を記録するのは難しいです。また、テストとして 'n = 4'と' m = 4'を設定し、同じエラーが出ました。奇妙な。 –

+0

値を特定のセルに書き込むことができます。とにかく、その行がそのエラーをスローする情報をもっと得られますか? – poke

答えて

3

このコード行には2つのことがあります。

for (int j = 1; i < n; ++j) 
  1. j上の制限はありません。 i < nの間に増加し続けるだけです。
    for (int j = 1; j < n; ++j)
  2. ++j刻みがになる前に、が使用されている可能性が高いです。 を使用してをインクリメントするときは、 jを使用してください。あなたのコードは、私はあなたが最初の反復は、あなたが空の行または列を見つけるまであなたがループしているように見えます1または2
+0

おっと... type-o :( –

+0

re:* type-o *実際のコードや質問に... ... – Jeeped

+0

私のコードでは、目が疲れていたときの目覚まし。 –

0

としてjに開始するかどうかわからないんだけど
for (int j = 2; j < n; j++)
のように書くことができ。それが見つからない場合(そうは思わない)、それは間違いなく境界を越えることになります。

何を使用していますか?それは相互運用ですか? Worksheet.UsedRange.Rows.CountWorksheet.UsedRange.Columns.Countを確認できます。あなたが何をしようとしているかによっては、一度に1つのセルをコピーするのではなく、単にWorksheet.UsedRangeをコピーして貼り付けることができます。

関連する問題