Excelのオートメ​ーションサーバーを使​用して任意の複数のシ​ートを1つのPDFに​エクスポートするには​どうすればよいですか​?

10 views (last 30 days)
Yuichi Gomi
Yuichi Gomi on 7 Jan 2020
Answered: Yuichi Gomi on 10 Jan 2020
任意の複数のシートを1つのPDFに書き出すにはどうすれば良いでしょうか。
hExcel = actxserver('Excel.Application');
hWorkbook = hExcel.Workbooks.Open(sprintf('%s',filename));
% (1)シートを1枚しか選択できない
hWorksheet = hWorkbook.Sheets.Item(1);
hWorksheet.ExportAsFixedFormat('xlTypePDF',output_filename1);
% (2)不要なシートまで書き出される
hWorkbook.ExportAsFixedFormat('xlTypePDF',output_filename2);
複数のシートを選択したり、不要なシートを削除してから書き出そうとしましたがうまくいきませんでした。
% 下記のように記述するとエラーになる
hWorksheet = hWorkbook.Sheets.Item(1:2);
% 下記のように記述しても消したつもりのシートも書き出される
Sheets = hExcel.ActiveWorkBook.Sheets;
invoke( get(Sheets,'Item',1),'Delete');

Accepted Answer

Yuichi Gomi
Yuichi Gomi on 10 Jan 2020
不要なシートを非表示にすることで必要なシートのみ書き出しができました。
hExcel = actxserver('Excel.Application');
hWorkbook = hExcel.Workbooks.Open(sprintf('%s',filename));
% PDF出力しないシートを非表示にする
hExcel.ActiveWorkbook.Worksheets.Item('Sheet1').Visible = 0;
hWorkbook.ExportAsFixedFormat('xlTypePDF',output_filename);
hWorkbook.Saved = 1;
hWorkbook.Close;
delete(hExcel);
また、削除する場合はアラートをオフにしてから削除するか、ExcelをVisibleにしてダイアログを表示させることでうまく削除できました。
hExcel = actxserver('Excel.Application');
hWorkbook = hExcel.Workbooks.Open(sprintf('%s',filename));
set(hExcel,'DisplayAlerts',0); % 削除時のアラートをオフ
hExcel.Visible = 1; % シート削除の確認ダイアログを表示
hWorksheet = hWorkbook.Sheets.Item(1);
Sheets = hExcel.ActiveWorkBook.Sheets;
hExcel.ActiveWorkbook.Worksheets.Item('Sheet1').Delete;
hWorkbook.ExportAsFixedFormat('xlTypePDF',output_filename);
hWorkbook.Saved = 1;
hWorkbook.Close;
delete(hExcel);
今回はPDF書き出し不要なシートへの参照があったため、不要なシートを非表示にしました。

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!