Excelファイルのバイナリデータを丸々変数に保持しています。
このデータをADOを使って操作したいのですが、一度ディスク上にxlsファイルとして保存し再度読み込んで操作しています。これを、ディスクに保存しないで直接編集したいのですが方法がわかりません。
プログラムにすると、下記Function
Call XLS_SAVE("c:\a.xls",Excelファイルのバイナリデータ)
Call XLS_OPEN("c:\a.xls")
を
Call XLS_OPEN(Excelファイルのバイナリデータ)
で操作できるようにしたいのです。よろしくお願いします。
Function XLS_SAVE(sFileName As String, aryBinary As Variant)
Const adLongVarBinary = 205
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim objStream As ADODB.Stream
Dim objRecordset As ADODB.Recordset
Set objRecordset = New ADODB.Recordset
With objRecordset
.Fields.Append "BinaryData",adLongVarBinary,LenB(aryBinary)
.Open
.AddNew
End With
objRecordset("BinaryData").AppendChunk aryBinary
objRecordset.Update
Set objStream = New ADODB.Stream
objStream.Type = adTypeBinary
objStream.Open
objStream.Write objRecordset.Fields("BinaryData").Value
objStream.SaveToFile sFileName, adSaveCreateOverWrite
objStream.Close
Set objStream = Nothing
Set objRecordset = Nothing
End Function
Private Function XLS_OPEN(sFilePath As String)
Set CN_XLS = New ADODB.Connection
CN_XLS.Provider = "MSDASQL"
CN_XLS.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & sFilePath & "; ReadOnly=True;"
CN_XLS.Open
Set RS_XLS = New ADODB.Recordset
RS_XLS.Open "SELECT * FROM [Sheet1$]", CN_XLS, 0
End Function
> ディスクに保存しないで直接編集したいのですが方法がわかりません。
残念ながら、できません。
厳密に言えば、Excelのバイナリフォーマット(BIFF)の仕様は公開されていますので、
直接読み書きする事も理論的には可能ですが…今までのコーディングを
そっくり作り変える必要があるでしょうから、茨の道になってしまうかと。
http://www.pleasuresky.co.jp/insidexl.php3
ツイート | ![]() |