2016-03-26 7 views
0

Was mein Code versucht, ist das Kopieren aller Zellen von einem Arbeitsblatt in ein anderes. Es ist die einfache BlockIrgendeine Idee, warum ich den Fehler bekomme "Spaltennummer muss zwischen 1 und 16384 sein"?

// 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; 
    } 
} 

und irgendwie ist dies der Fehler werfen

Spaltennummer zwischen 1 und 16384

Jede Idee sein muss, warum das sein könnte? Ich sehe keine Endlosschleifen oder ähnliches.

+0

Sie sollten die Werte von 'm' und' n' ausloggen. – poke

+0

@poke Dies ist eine Web-App, daher ist es schwierig, Werte zu protokollieren. Außerdem habe ich als Test "n = 4" und "m = 4" gesetzt und den gleichen Fehler erhalten. Seltsam. –

+0

Sie könnten den Wert in eine bestimmte Zelle schreiben. Wie auch immer, erhalten Sie weitere Informationen, welche Zeile diesen Fehler verursacht? – poke

Antwort

3

Es gibt zwei Dinge mit dieser Codezeile.

for (int j = 1; i < n; ++j) 
  1. Es gibt keine Grenze für j ist; Es wird einfach weiter zunehmen, während i < n. Es soll wohl sein:
    for (int j = 1; j < n; ++j)
  2. Dies ist höchstwahrscheinlich nicht verwandte, aber ++j Schritte vor j verwendet wird. Verwenden Sie j++, um zu erhöhen, nachdem j verwendet wird. Der Code könnte als
    for (int j = 2; j < n; j++)
    geschrieben Ich bin mir nicht sicher, ob Sie die erste Iteration wollen mit j als 1 oder 2.
+0

Whoops ... Typ-O :( –

+0

Re: * Typ-O * In der tatsächlichen Code oder nur in der Frage ...? – Jeeped

+0

In meinem Code. Ich werde Ihnen beste Antwort für die Lieferung eines Paares geben Augen, wenn meine scheiterte –

0

Es sieht aus starten, wie Sie sich Looping, bis Sie eine leere Zeile oder Spalte finden . Wenn es nicht gefunden wird (scheint unwahrscheinlich), dann wird es definitiv die Grenzen überschreiten.

Was verwenden Sie? Ist es interop? Sie können nach Worksheet.UsedRange.Rows.Count und Worksheet.UsedRange.Columns.Count suchen. Je nachdem, was Sie versuchen, können Sie einfach Worksheet.UsedRange kopieren und einfügen, anstatt die Werte Zelle für Zelle zu kopieren.