我编写此代码以打开excel文件:
private readonly object _missing = Type.Missing;
private IEnumerable<CellModel> GetUsedCells(string fileName)
{
SetNewCurrentCulture();//set "en-US" culture
var application = new Application();
var workbooks = application.Workbooks;
Workbook workbook = null;
try
{
workbook = workbooks
.Open(fileName,
0, false, _missing, "", "",
true, XlPlatform.xlWindows, _missing, false, false,
_missing, false, false, XlCorruptLoad.xlNormalLoad
);
}
finally
{
//realocate memory
if(workbook != null)
{
ReleaseComObject(workbook);
workbook = null;
}
workbooks.Close();
ReleaseComObject(workbooks);
workbooks = null;
application.Quit();
ReleaseComObject(application);
application = null;
GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
ResetCurrentCulture();//reset old culture
}
}
在Open方法中出现此错误:“HRESULT异常:0x800A03EC”
注释:
我使用vs2012,我的项目的Target Framework是4,而Microsoft.Office.Interop.Excel的版本是14.0.0.0
服务器信息:Windows Server 2008 32位,IIS7,Excel 2010
我在“C:\ Windows \ System32 \ config \ systemprofile”中创建桌面文件夹,并将权限设置为“网络服务”和“用户”
在“Microsoft Excel应用程序”中更改DCOM配置中的权限并选择“交互式用户”
为“C:\ Windows \ Temp”设置“网络服务”和“用户”的权限
我很困惑。请帮帮我!
答案 0 :(得分:3)
Interop is NOT supported in sever-scenarios by MS。
有许多选项可以在服务器上没有Interop /安装Excel的情况下读取/编辑/创建Excel文件:
MS提供免费的OpenXML SDK V 2.0 - 请参阅http://msdn.microsoft.com/en-us/library/bb448854%28office.14%29.aspx(仅限XLSX)
这可以读取+写入所有MS Office文件(包括Excel)。
另一个免费选项见http://www.codeproject.com/KB/office/OpenXML.aspx(仅限XLSX)
如果你需要更多像处理旧的Excel版本(如XLS,不仅仅是XLSX),渲染,创建PDF,公式等,那么有不同的免费和商业库,如ClosedXML(免费,仅限XLSX), EPPlus(免费,仅限XLSX),Aspose.Cells,SpreadsheetGear,LibXL和Flexcel等。