![](/img/trans.png)
[英]Microsoft.Office.Interop.Excel or EPPlus for read a huge (or not) Excel file
[英]Saving file as PDF by using Microsoft.Office.Interop.Excel
我正在使用Microsoft.Office.Interop.Excel.Workbooks.Open()方法打开.XML文件,然后使用Microsoft.Office.Interop.Excel.Workbook.ExportAsFixedFormat()方法发布(保存)打开的.XML文件作为.PDF文件。
现在,在我的开发和预生产环境中,一切都运行良好,但是在生产服务器上,似乎是在调用Microsoft.Office.Interop.Excel.Workbooks.Open()时 ,该方法的执行随后被暂停甚至不执行。 。(不会发现任何异常或任何我可以知道的错误,即使不在我的日志文件或事件查看器中也没有。),最终,显然没有任何地方保存.PDF文件。
这是我的代码:
using ExcelApp = Microsoft.Office.Interop.Excel;
public static void ToPdf()
{
// Declare the Excel Application object and set it in null state
ExcelApp.Application activeExcel = null;
// Declare the Workbook to be used within the Excel Application object
ExcelApp.Workbook openWorkBook = null;
// Used for passing parameter for the attribute of opening the .XML file
object tMiss = Type.Missing;
// .XML file location
string xmlPathName = "C:/Windows/Temp/XmlFile.xml";
try
{
// Instanitating the Excel.Application to a new valid Instance object
activeExcel = new ExcelApp.Application();
// Open Excel as Hiden
activeExcel.Visible = false;
// Open Excel w/o alerts
activeExcel.DisplayAlerts = false;
//
// Log this line
//
LogTxt.LogCreator("Set Excel GUI to be open Hiden with no Alerts");
// Open an Excel instance and passing the .XML file Path
openWorkBook = activeExcel.Workbooks.Open(xmlPathName, 0, false, tMiss, tMiss,
tMiss, true, tMiss, tMiss, tMiss,
true, tMiss, false, false);
//
// Log this line
//
LogTxt.LogCreator("Excel Application Opend");
// Publishing the opened workbook (.xml file) as .pdf file
openWorkBook.ExportAsFixedFormat(ExcelApp.XlFixedFormatType.xlTypePDF, pdfPathName);
//
// Log this line
//
LogTxt.LogCreator("Excel to .PDF published");
}
catch (Exception ee)
{
LogTxt.LogCreator(string.Format("Error is {0}", ee.InnerException.Message));
}
finally
{
// Flag for finding the Excel process or not
//bool foundExcel = false;
if (openWorkBook != null)
{
// Closing the workbook
openWorkBook.Close(false, tMiss, tMiss);
// here we say that this object is not going to be called anymore
Marshal.ReleaseComObject(openWorkBook);
}
if (activeExcel != null)
{
// Closing the Excel
activeExcel.Quit();
// here we say that this object is not going to be called anymore
Marshal.ReleaseComObject(activeExcel);
//
// Log this line
//
LogTxt.LogCreator("Excel Procces Closed");
}
GC.GetTotalMemory(false);
// Calling to GC go through all gen
GC.Collect();
// Stops the corrent thread untill the Finalizers empty the queue
GC.WaitForPendingFinalizers();
// Calling the GC to go through all gen
GC.Collect();
GC.GetTotalMemory(true);
}
注意-我正在登录我的日志文件,因此可以查看部署后执行的代码行。
我还通过将\\ Users和Network Service用户添加到Access Permissions Defaults和Launch and Activation Permissions中,将\\ Users和Network Service用户添加到COM Services选项卡中的COM Security选项卡中,确保具有执行COM组件的权限。
如这里所解释。
我要问的是,你们是否有任何想法了解Open()方法的问题。
我会看着用它来读取Excel文件
http://exceldatareader.codeplex.com/
然后,这将使您可以打印为PDF。
它是开源的,可在商业应用中免费使用。
不是一个完整的解决方案,而是一个开始。 然后,您不在服务器环境中使用Com
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.