

C++からADOを使用してExcelファイルの行追加、検索、更新をしています。削除だけどうしてもできません。ADOでExcelファイルを指定した場合に、そのような制限はあるのでしょうか。「エラーを特定できません」となります。

[code]

    CString strFile = _T("C:\\temp\\sample.xlsx");
    CString s;
    try
    {
     CString strCon;
     strCon.Format( _T( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Extended Properties=Excel 12.0 xml" ) , strFile );
     con.CreateInstance(__uuidof(Connection));
     con->Open(_bstr_t(strCon), "", "", adConnectUnspecified);
    
     _RecordsetPtr rs;
     rs.CreateInstance(__uuidof(Recordset));
     rs->CursorLocation = adUseClient;
     rs->Open(_variant_t( "SELECT * FROM [test$] WHERE [ID]='A1'" ), con.GetInterfacePtr(), adOpenForwardOnly, adLockOptimistic, adCmdText );
    
     if( !rs->GetadoEOF() )
     {
      rs->Delete(adAffectCurrent);
      rs->Close();
     }
    }
    catch(_com_error& e)
    {
     s=e.ErrorMessage();
    }
    
[/code]


CC BY-SA 4.0
2020-07-25T16:43:59.690
68964
2020-07-25T23:40:13.353
2020-07-25T16:45:40.183
3060
19539
question
c++ excel mfc
ADOでExcelファイルを使用した場合行削除が出来ない


まず残念な話ですが、お使いのMicrosoft.ACE.OLEDB.12.0ですが、配布はされていますがドキュメントは提供されていません。ですので詳しい挙動は不明としか言いようがありません。

これの前身？のMDACも既にドキュメントが散り散りになっています。とりあえず探し出せた範囲で[Microsoft Excel Driver
Programming Considerations](https://docs.microsoft.com/en-
us/sql/odbc/microsoft/microsoft-excel-driver-programming-
considerations?view=sql-server-ver15) / [Read-Only Status (Excel
Driver)](https://docs.microsoft.com/en-us/sql/odbc/microsoft/read-only-status-
excel-driver?view=sql-server-ver15)の中に

> It is possible to update values when using the Microsoft Excel driver, but a
> row cannot be deleted from a table based on a Microsoft Excel spreadsheet,
> so updates are not considered officially supported by the Microsoft Excel
> driver.

とありました。ACEも同じ仕様を引き継いでいて、行削除はサポートされていないのだと思われます。


CC BY-SA 4.0
2020-07-25T23:40:13.353
68965
2020-07-25T23:40:13.353
4236
68964
answer