vb.netはvisualstudio2015です。 使用しているDBはSQLserver Excelはxltxファイルからxlsxファイルを作成したいです。
流れとしては、vbからストアドをコールして、データを取得し、vbに返してvbがExcelテンプレートに書き出して
Excel帳票を作成する流れです。
今回の質問内容としては、タイトルにもある通りvbがExcelの書き出しを行う際に、Excelの計算式(=SUM(I9,I10,I11,I12,I13,I14,I15)や=SUM(I8:N8,P8:U8)など)
がセルに入力されたEXCEL帳票の作成の仕方がわからないというものです。
手法として考えたのが、①EXCELテンプレートに直接計算式を入力する方法 ②vbで数値を出力する代わりにExcelの計算式を出力する方法
の二つです。
①の手法の問題点はExcel出力時に「オブジェクト参照がオブジェクトインスタンスに設定されていません。」というエラーメッセージが出ます。
テンプレートを「計算式記入前」→「計算式記入後」に変更して、vbは「何も手を加えず変更なし」の時と、
テンプレートを「計算式記入前」→「計算式記入後」・vbを「EXCELテンプレートに計算式を入れた箇所にデータを出力する部分をコメントアウトした」時の
2パターンともに発生していました。
テンプレートを「計算式記入前」・vbを「EXCELテンプレートに計算式を入れた箇所にデータを出力する部分をコメントアウトした」ものをそのまま使用した
時には、エラーメッセージが出ず、Excel帳票を出力させることができました。
②の手法では、Excelの計算式で使用したいセルをPos(x,y)を使って座標で指定し、指定した座標を文字型で宣言した変数に代入して、
Excelに出力したい場所へデータを出力する部分をExcelの計算式を出力するように変更して実行しました。
vb.net
1 Dim Cel1 As String = "" 2 Dim Cel2 As String = "" 3 .Pos(iCol, 4 + iRow * 14).Double = CDec(dr("契約売上")) 4 .Pos(iCol, 5 + iRow * 14).Double = CDec(dr("スポット売上")) 5 .Pos(iCol, 6 + iRow * 14).Double = CDec(dr("物販売上")) 6 '.Pos(iCol, 7 + iRow * 14).Double = CDec(dr("売上合計")) 7 Cel1 = CStr(.Pos(iCol, 4 + iRow * 14)) 8 Cel2 = CStr(.Pos(iCol, 6 + iRow * 14)) 9 .Pos(iCol, 7 + iRow * 14).Str = "=SUM(" & Cel1 & ":" & Cel2 & ")" 10 .Pos(iCol, 8 + iRow * 14).Double = CDec(dr("人件費")) 11 .Pos(iCol, 9 + iRow * 14).Double = CDec(dr("積上設定原価1")) 12 .Pos(iCol, 10 + iRow * 14).Double = CDec(dr("積上設定原価2")) 13 .Pos(iCol, 11 + iRow * 14).Double = CDec(dr("積上設定原価3")) 14 .Pos(iCol, 12 + iRow * 14).Double = CDec(dr("積上設定原価4")) 15 .Pos(iCol, 13 + iRow * 14).Double = CDec(dr("積上設定原価5")) 16 .Pos(iCol, 14 + iRow * 14).Double = CDec(dr("積上設定原価6")) 17 '.Pos(iCol, 15 + iRow * 14).Double = CDec(dr("積上設定原価7")) 18 Cel1 = CStr(.Pos(iCol, 8 + iRow * 14)) 19 Cel2 = CStr(.Pos(iCol, 14 + iRow * 14)) 20 .Pos(iCol, 15 + iRow * 14).Str = "=SUM(" & Cel1 & ":" & Cel2 & ")" 21 '.Pos(iCol, 16 + iRow * 14).Double = CDec(dr("粗利金額")) 22 Cel1 = CStr(.Pos(iCol, 7 + iRow * 14)) 23 Cel2 = CStr(.Pos(iCol, 15 + iRow * 14)) 24 .Pos(iCol, 16 + iRow * 14).Str = "=" & Cel1 & "-" & Cel2 25
結果としては、「型'BB.XlsxCell'のオブジェクトを型'System.String'にキャストできません。」
とエラーメッセージが出力されます。
以上の結果から質問としては、
①と②の手法でそれぞれのエラーを発生させないようにするにはどうすればよいのかと、
他の手法でvbからExcelの計算式が書かれた帳票を出力する方法が聞きたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー