0

エクセルファイルがあります。

それを開いて特定のシートを選択し、それらのシートを PDF 形式に変換する必要があります。Excel ファイル全体を変換できますが、特定のシートのみを変換する方法がわかりません。

私の考えは、特定のシートを既存のファイルから新しい一時ファイルにコピーし、その新しい一時ファイル全体を PDF に変換することです。

多分もっと簡単な方法がありますか?

これまでの私のコードは =>

using Word = Microsoft.Office.Interop.Word;
using Excel = Microsoft.Office.Interop.Excel;

    public static void ExportExcel(string infile, string outfile, int[] worksheets)
    {
        Excel.Application excelApp = null;
        Excel.Application newExcelApp = null;
        try
        {
            excelApp = new Excel.Application();
            excelApp.Workbooks.Open(infile);
            //((Microsoft.Office.Interop.Excel._Worksheet)excelApp.ActiveSheet).PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape;  

            excelApp.ActiveWorkbook.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePDF, outfile);
        }
        finally
        {
            if (excelApp != null)
            {
                excelApp.DisplayAlerts = false;
                excelApp.SaveWorkspace();
                excelApp.Quit();
            }
         }
    }

ExportAsFixedFormat変換中に特定のページ (シート) のみを考慮するようにメソッドを設定できますか?

そうでない場合、あるファイルから別のファイルにシートをコピーするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

0

ファイルを新しい宛先にコピーし、宛先を開き、不要なシートを削除してエクスポートするだけです。これは私のアイデアの(テストされた)例です。

// infile is the excel file, outfile is the pdf to build, sheetToExport is the name of the sheet
public static void ExportExcel(string infile, string outfile, string sheetToExport) 
{ 
    Microsoft.Office.Interop.Excel.Application excelApp = new     
                        Microsoft.Office.Interop.Excel.Application();
    try  
    {  
        string tempFile = Path.ChangeExtension(outfile, "XLS"); 
        File.Copy(infile, tempFile, true); 
        Microsoft.Office.Interop.Excel._Workbook excelWorkbook = 
                                excelApp.Workbooks.Open(tempFile);  

        for(int x = excelApp.Sheets.Count; x > 0; x--) 
        { 
            _Worksheet sheet = (_Worksheet)excelApp.Sheets[x];
            if(sheet != null && sheet.Name != sheetToExport) 
                sheet.Delete(); 
        }  
        excelApp.ActiveWorkbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, outfile);  
    }  
    finally  
    {  
        if (excelApp != null)  
        {  
             excelApp.DisplayAlerts = false;  
             excelApp.SaveWorkspace();  
             excelApp.Quit();  
         }  
     }      
 } 
于 2012-08-11T10:30:01.793 に答える
0

元のファイルから必要なシートだけを印刷できる場合があります。マクロ レコーダーを起動し、いくつかのシートを選択して、名前を付けて PDF に保存しました。コードは次のとおりです。

Sheets(Array("Sheet1", "Sheet2")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\doug\Documents\Book1.pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

選択したシートを変更して再度実行すると、期待どおりに機能しました。

奇妙なのは、実際の [名前を付けて保存] ダイアログで、[オプション] に移動して [選択したシート] をチェックできることです。これは ExportAsFixedFormat のパラメーターとしては使用できませんが、ダイアログで自動的に選択されており、呼び出されたときのデフォルトでもある可能性があります。

于 2012-08-11T15:57:23.080 に答える