development of

Tieghaに関する備忘録とおまけ

【AutoCAD Mechanical】部品表のデータを書き出す

部品表のデータを書き出すには

一般的には部品表 ダイアログ ボックス から部品表の内容を書き出すと思いますが、 f:id:tknmt:20190611173802p:plain API を使用して指定したファイル形式で書き出すことも可能です。

部品表の書き出しには、AcmBOMManager::exportBOM メソッドを使用します。
書き出せるファイル形式は、Microsoft Access (.mdb)Microsoft Excel (.xls)、テキスト形式 (*.txt) などがあります。

サンプルコード

#define EXPORT_EXT _T("Microsoft Access(*.mdb)|*.mdb|Microsoft Access 97(*.mdb)|*.mdb|Microsoft Excel 97(*.xls)|*.xls|Microsoft Excel 95(*.xls)|*.xls|dBase 5(*.dbf)|*.dbf|dBase IV(*.dbf)| *.dbf|dBase III(*.dbf)|*.dbf|タブ区切りのテキスト形式(*.txt)|*.txt|セミコロン区切りのテキスト形式(*.csv)|*.csv|HTML書き出し(*.html)|*.html||")
void ExportBOM()
{
    // ファイルダイアログを表示
    CFileDialog dlg(
        FALSE, 
        _T("mdb"),
        NULL, OFN_CREATEPROMPT | OFN_OVERWRITEPROMPT,
        EXPORT_EXT);
    if (dlg.DoModal() != IDOK) return;
    
    AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
    AcDbObjectId bomId;
    CString bomTableName;

    // 部品表[MAIN]を取得
    acmBomMgr->getBomTable(bomId, bomTableName, pDb->currentSpaceId());

    // 部品表を書き出す
    if (acmBomMgr->exportBOM(
        (AcmBOMManager::ExportBOMType)(dlg.m_ofn.nFilterIndex > 7 ? dlg.m_ofn.nFilterIndex + 3 : dlg.m_ofn.nFilterIndex),
        bomId, 
        dlg.GetPathName(),
        bomTableName, 
        true) == Acad::eOk)
    {
        acutPrintf(_T("\n部品表[%s]の内容を[%s]に保存しました。"), bomTableName, dlg.GetFileName());
    }
    else
    {
        acutPrintf(_T("\n部品表[%s]の内容の保存に失敗しました。"), bomTableName);
    }
}

※サンプルコードについての補足

AcmBOMManager::exportBOM メソッドに渡す書き出すファイルの形式として、AcmBOMManager::ExportBOMType 列挙体を使用して指定します。

列挙子 ファイル形式
eEXPORT_MDB 1 Microsoft Access
eEXPORT_MDB97 2 Microsoft Access 97
eEXPORT_EXCEL97 3 Microsoft Excel 97
eEXPORT_EXCEL95 4 Microsoft Excel 95
eEXPORT_DB5 5 dBASE 5
eEXPORT_DBIV 6 dBASE IV
eEXPORT_DBIII 7 dBASE III
eEXPORT_FOXVIS 8 Microsoft Visual Foxpro 3.0
eEXPORT_FOX26 9 Microsoft Foxpro 2.6
eEXPORT_FOX25 10 Microsoft Foxpro 2.5
eEXPORT_TXT 11 タブ区切りのテキスト形式
eEXPORT_CSV 12 セミコロン区切りのテキスト形式
eEXPORT_HTML 13 HTML形式
eEXPORT_ALLFILE 14

サンプルコードでは Foxpro 形式以外の形式で書き出せるようにしています。