2012-03-06 14 views
2

をファイルクローズしようとして立ち往生:私がやっている何エクスポートエクセルPDFにファイルを - 私は、ExcelファイルへのURLを取る機能があり、その後、PDFファイルとしてエクスポートExcelは

public static void ExportFromExcel(string url) 
{ 
    // Create COM Objects 
    Application excelApplication = new Application(); 
    Workbook excelWorkbook = 
     excelApplication.Workbooks.Open(HttpContext.Current.Server.MapPath(url)); 

    try 
    { 
     // Call Excel's native export function 
     excelWorkbook.ExportAsFixedFormat(
      XlFixedFormatType.xlTypePDF, 
      HttpContext.Current.Server.MapPath(url.Replace(".xlsx", ".pdf"))); 
    } 
    catch (Exception ex) 
    { 

    } 
    finally 
    { 
     // Close the workbook, quit Excel, and clean up regardless of the results 
     excelWorkbook.Close(); // HANGS AND FAILS HERE 
     excelApplication.Quit(); 

     excelApplication = null; 
     excelWorkbook = null; 
    } 
} 

ですExcelファイルを作成し、その直後にそのファイルからPDFを作成する:

using (FileStream fs = File.Create(HttpContext.Current.Server.MapPath(filePath))) 
{ 
    byte[] data = pck.GetAsByteArray(); 
    fs.Write(data, 0, data.Length); 
} 

Pdf.ExportFromExcel(filePath); 

それだけで罰金Excelファイルを作成し、それはまた、PDFファイルを作成します。しかし、ページが長時間ハングアップした後、私に私のpdfコードでexcelWorkbook.Close();でエラーを与える:

リモートプロシージャコールに失敗しました。 (HRESULTからの例外:0x800706BE)

実際にファイルが作成されます。しかし、私がファイルディレクトリに行くと、一時Excelファイル(Excelファイル名の前に~$がある)もあります。

Excelファイルを削除しようとすると、そのファイルが別のプロセスで使用されているとエラーが表示され、タスクマネージャーでEXCEL.EXEを終了するまでExcelファイルを削除できません。

何らかの理由で、私のExcelファイルがpdfの作成を終了した後に閉じられません。私のコードで何か間違っていますか? (!ASP.NET/IISを含む)は、サーバー上の相互運用機能を使用して

答えて

3

は、MSによってサポートされていません - http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

を参照してくださいWindows VistaのMSは(ASPのようなWindowsサービスを防止するため、複数のセキュリティ関連の対策を導入しましたので、 (プリンタへのアクセス、ネットワーク共有へのアクセスなど)を行うことから、あなたはそれが動作するようにいくつかのセキュリティ対策を回避する必要があることを意味します(推奨されません!いくつかのオプション(自由およびコマーシャルが)そこにあるサーバー・シナリオでなどのOfficeを必要とせずにExcelファイルを扱うために

私はAspose.CellsFlexcelをお勧めすることができます - 両方のPDFエクスポート機能が付属しています... SpreadsheetGearを試してみませんでしたが、それについてたくさんの良いことをお読みください。

無料オプション(ただし、新しいxlsx形式のみで、PDFエクスポートをサポートしているかどうかはわかりません)は、例えばOpenXML 2 from MSEPPlus

+0

残念ながら、私はそれらの製品の代金を支払う余裕がなく、無料のオプションはPDFエクスポートをサポートしていません。実際には、MSFTが相互運用機能を使用すると言う投稿があります(http://social.msdn.microsoft.com/Forums/pl/oxmlsdk/thread/26d9879a-6c1f-4a71-8dde-d6a1d9b0b110)。 私が見た他の場所でも、interopだけを使用するとも言われています。 だから、私は矛盾した意見を全部得ている。私はむしろinteropを使用しないでください - 私はこれを行うことができる他の方法を知っていますか? – Steven

+0

@スティーブン申し訳ありませんが、他の方法はわかりません。 InteropはASP.NETではまったくサポートされていません(私の答えの最初のリンクを参照してください - 知識ベースの公式MSFTリンクです)... – Yahia

+0

ありがとう、私はちょうどitextsharpを使ってpdfを作成しました – Steven

0

あなたはPDFにExcelファイルにエクスポートするには、次のコードを使用することができます。

// Saving an XLS file in Aspose.Pdf xml format 
Workbook wb = new Workbook(); 
wb.Open("C:\\book1.xls); 
wb.Save("C:\\xls2pdf.xml", FileFormatType.AsposePdf); 

// Converting XLS file to PDF through Aspose.Pdf using Aspose.Pdf xml file as a medium 
Aspose.Pdf.Pdf pdf = new Aspose.Pdf.Pdf(); 
pdf.BindXML("c:\\xls2pdf.xml", null); 
pdf.Save("C:\\xls2pdf.pdf"); 


You can download Aspose.pdf from the following link 
http://www.aspose.com/community/files/51/.net-components/aspose.pdf-for-.net/category1184.aspx 

You can download Aspose.cells from the following link 
http://www.aspose.com/community/files/51/.net-components/aspose.pdf-for-.net/category1184.aspx 
1

私は、これが「公式に」「サポートされていない」と回答されていることを知っています。つまり、私はこの同じ問題に遭遇しました。

実際の例外は、赤ちゃんのようなものです。本当の問題はパーミッションです。

適切な権限を持つユーザーのIDで実行するようにWebサービスを設定することもできます(必ずしも良いとは限りません)。または、DCOMCNFGにアクセスして、Excelユーザーのアクセス許可を変更して、適切なアクセス。

これは将来的に誰かに役立つことを願っています。

0
  1. インストール2007年のMicrosoft OfficeスイートService Pack 3(SP3) http://www.microsoft.com/en-in/download/details.aspx?id=27838

  2. インストール2007年のMicrosoft Officeアドイン:マイクロソフト保存PDFまたはXPS http://www.microsoft.com/en-in/download/details.aspx?id=7

として必須:セットMicrosoft XPSドキュメントライターをデフォルトプリンタとしてサーバー。 ExportAsFixedFormat関数が実行されるMicrosoft XPSドキュメントライター ExcelをPDFに変換します。

これは私のために働いています。

関連する問題