変数で保持しているExcelファイルを、ディスクに保存しないで直接操作するには?


skylark  2004-09-06 23:39:04  No: 85432

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


魔界の仮面弁士  2004-09-07 01:03:30  No: 85433

> ディスクに保存しないで直接編集したいのですが方法がわかりません。

残念ながら、できません。

厳密に言えば、Excelのバイナリフォーマット(BIFF)の仕様は公開されていますので、
直接読み書きする事も理論的には可能ですが…今までのコーディングを
そっくり作り変える必要があるでしょうから、茨の道になってしまうかと。
http://www.pleasuresky.co.jp/insidexl.php3


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加