1

Excel ファイルを生成する VB.NET アプリケーションを作成しています。

ここでの私の意図はCONCATENATE、セルで使用する特定の数式を記述することです。

ここで、次のコード行が上記の例外を発生させます。

0) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
   "=CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)"

次の行は例外を発生させません。(上の行=の先頭に がないだけです。例外が発生しないということは、インデックスが適切に使用されていることを意味します。表記を簡単にするために、次の節ではそれらを取り除きます)。また、まったく同じ数式の前に手動で Excel を配置する=と、数式は正しい結果を返します (正しくグラブしますBatches!J3) 。

1) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
   "CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)"

次の行も問題なく実行されます。

2) tSheet.Cells(indexes).Formula = "=CONCATENATE(" & Pixels(PixelIndex) & ")"

この行も同様に機能します。

3) tSheet.Cells(indexes).Formula = "=CONCATENATE(Batches!J3)"

2)と3)の組み合わせだけで例外が発生するようです。

Visual Studio 2012、Excel 2007 を使用しており、Microsoft Excel 12.0 Object Library を含めています。

助けてくれてありがとう!

4

1 に答える 1

1

ロケールについて言及していないため、Excel が引数の区切り記号がセミコロン (de-DE ロケールの場合) ではなくコンマ (en-UK ロケールの場合) であることを期待している場合に備えて、次を試してください。

tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
    "=CONCATENATE(" & Pixels(PixelIndex) & ",Batches!J3)"

(編集)それが機能する場合は、次のようなものを使用してロケールに依存しないようにすることができます:

Dim ci As CultureInfo = System.Globalization.CultureInfo.CurrentCulture
Dim listSep As String = ci.TextInfo.ListSeparator
tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula =
    "=CONCATENATE(" & Pixels(PixelIndex) & listSep & "Batches!J3)"

これは、Windows カルチャから数値リスト区切り記号を取得するだけです。これは、Excel が で実行されることを前提としていますSystem.Globalization.CultureInfo.CurrentCulture。これに関する詳細情報と、発生する可能性のある特殊なケースについては、次の 2 つの MSDN リファレンスを参照してください。

(編集終了)

これがうまくいかない場合は、さらに情報が必要になる可能性があります - 元の質問に対する私のコメントを参照してください。

于 2013-05-27T17:12:59.753 に答える