oledbでExcelブックにシートを作成しデータを書き込んだシート名の実態について
-
2012年4月8日 8:36
asp.netで開発しています。
アプリケーションのイベントでディレクトリに格納されたExcelブックにSheet1を作成してデータを書き込んでいます。
書き込まれたExcelブックのシート名をSheet1→workに名前の変更し、ディレクトリに格納しイベントを実行すると
「OleDb.OleDbException: テーブル 'Sheet1' は既に存在しています。」というメッセージが出力されます。
Excelの仕様ではと思い、ローカルで新規でExcelブックを作成後、Sheet1→workに変更後、ディレクトリに格納しイベントを実行すると
正常にSheet1にデータは書き込まれていました。
アプリケーションから実行して書き込んだシートについては、名前を変更しても変更前のシート名は実態としてどこかに残っているのでしょうか?
ご教授お願いします。
実ソースは以下になります。
'カラム名の設定
With sbSQL
.Remove(0, .Length)
.AppendLine("CREATE TABLE [Sheet1] ( ")For i = 0 To dataTable.Columns.Count - 1
If i <> dataTable.Columns.Count - 1 Then
If i <> dataTable.Columns.Count - 2 Then
.AppendLine(dataTable.Columns.Item(i).ColumnName & " " & "CHAR(255), ")
Else
.AppendLine(dataTable.Columns.Item(i).ColumnName & " " & "CHAR(255) ")
End If
Else
.AppendLine(") ")
End If
Next
End WithUsing cmd As New OleDbCommand(sbSQL.ToString, con)
cmd.ExecuteNonQuery()
End Using
'データの設定
With sbSQL
.Remove(0, .Length)
.AppendLine("INSERT INTO [Sheet1] VALUES ( ")For i = 0 To dataTable.Columns.Count - 1
If i <> dataTable.Columns.Count - 1 Then
If i <> dataTable.Columns.Count - 2 Then
.AppendLine(dataTable.Columns.Item(i).ColumnName & ", ")
Else
.AppendLine(dataTable.Columns.Item(i).ColumnName)
End If
Else
.AppendLine(") ")
End If
Next
End With
'書き込み
Using cmd As New OleDbCommand(sbSQL.ToString, con)
For i = 0 To dataTable.Rows.Count - 1
cmd.Parameters.Clear()
For j = 0 To dataTable.Columns.Count - 1
cmd.Parameters.Add(New OleDbParameter(dataTable.Columns.Item(j).ColumnName, dataTable.Rows(i).Item(j)))
Next
cmd.ExecuteNonQuery()
Next
End Using
すべての返信
-
2012年4月8日 9:34
> asp.netで開発しています。
ASP.NET の Web アプリの一部かもしれませんが、書いてあることは
全く ASP.NET とは関係ありません。前にも何度もお願いしましたが適切なフォーラムで質問されることを
お勧めします。その方が、質問者にも、回答者にも、閲覧者にも好ましいのは間違い
ないと思います。 -
2012年4月9日 0:59モデレータ
シート名をworkへ変更する処理はどこでどのようにされていますか? 私の知る限りOleDbではできなかったと思いますが、サーバーにおいて手動で変更されているのでしょうか?
また、以下に有名なリンクを貼っておきますが、サーバーにおいてOfficeを操作することは推薦されておらず、安定して動作することは保障されていません。Office のサーバーサイド オートメーションについて
http://support.microsoft.com/kb/257757/ja★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク yukimai 2012年4月11日 1:19
-
2012年4月11日 1:23
返信ありがとうございます
アプリケーションからExcelブックやシートを作成した場合には
ブックとシートの定義つけがされているようです。
シート名をリネームしても定義つけはリネーム前のままのためが原因と理解しました。

