[转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案

简介: 引用地址:http://www.cnblogs.com/linyechengwei/archive/2011/03/25.html 昨天,组里一个小朋友告诉我,他写的报表生成服务中无法打开一个已经存在的Excel 2007文件,他的开发环境是Win7、Visual Studio .Net 2008(Windows Server 2008下同样存在此问题)。

引用地址:http://www.cnblogs.com/linyechengwei/archive/2011/03/25.html

昨天,组里一个小朋友告诉我,他写的报表生成服务中无法打开一个已经存在的Excel 2007文件,他的开发环境是Win7、Visual Studio .Net 2008(Windows Server 2008下同样存在此问题)。比较奇怪的是,Excel Automation对象是可以实例化的,但是在执行Workbooks.Open时抛出异常如下:

Microsoft Office Excel 不能访问文件“a.xls”。 可能的原因有:

• 文件名称或路径不存在。 
• 文件正被其他程序使用。 
• 您正要保存的工作簿与当前打开的工作簿同名。_Microsoft Office Excel_   在 TemplateExcelFileExporter.Create(DataSet ds, String fullName) 位置 E:\Demos\ExportService\ExportService\Class1.cs:行号 263 
   在 ExportService.Service1.OnStart(String[] args) 位置 E:\Demos\ExportService\ExportService\Service1.cs:行号 30

    事实上,a.xls文件是存在的,而同样的代码在非Service程序是正常的,且Service部署到Windows Server 2003上运行正常。我不得不怀疑是权限问题,服务是以Local System运行的,在给工作目录加上了相应的权限后发现问题依旧。无奈,上网去转了一圈,找到了一个解决方案,以下是其中关键的部分:

This solution is ...

・Windows 2008 Server x64 
  Please make this folder.

  C:\Windows\SysWOW64\config\systemprofile\Desktop

・Windows 2008 Server x86

  Please make this folder.

  C:\Windows\System32\config\systemprofile\Desktop

  ...instead of dcomcnfg.exe.

This operation took away office automation problems in my system.

A Desktop folder seems to be necessary in the systemprofile folder to open file by Excel.

It disappears from Windows2008, Windows2003 had the folder, 
and I think it cause this error.

    虽然问题解决了,但是为什么在X:\Windows\System32\config\systemprofile目录下创建名为Desktop目录即可解决问题,这个还不是很清楚。继续查了一些资料,应该还是权限的问题,因为无论Windows Service运行在哪个帐号下,它所创建的文件的Owner都是Administrator,因此Excel无法打开此文件。但为啥一定要建一个空的Desktop目录,仍未找到答案。如果哪位高价知道,请不吝赐教。

源文地址:http://www.cnblogs.com/TonyJoule/archive/2010/05/18/1737973.html

posted @ 2011-03-25 18:47 凡夫·俗子 阅读(357) 评论(0)  编辑

在网站中使用了Excel组件,网站发布部署后,在所有使用到Excel组件的相关功能点上,都出现了如下错误:

The 'Microsoft.ACE.OLEDB.14.0' provider is not registered on the local machine.

在网上查找了资料后,得到了解决.

基本的解决就是:

1、在服务器上要安装office组件

2、要安装office的数据连接组件(AccessDatabaseEngine)

 

说明:我安装了office2010的数据链接组件后,还是没有解决这个问题,但我网站中引用了的Excel组件版本的确是14.0,最终是把

Microsoft.ACE.OLEDB.14.0 修改成了 Microsoft.ACE.OLEDB.12.0

才终于解决了这个问题,具体原因自己也不太清楚。

=====================================================================================

查找到的相关资料如下:

http://social.msdn.microsoft.com/Forums/zh-CN/whatforum/thread/7c6d2c4a-feff-4517-af63-c1509ddae3f4

http://www.cnblogs.com/netcai/archive/2011/03/24/1993329.html

windows 2008 r2 x64版本的操作系统中通过oledb提供程序连接访问Excel2010/2007时,程序会报如下错误:

System.InvalidOperationException: The 'Microsoft.ACE.OLEDB.14.0' provider is not registered on the local machine.

此查找资料认为产生此种错误的原因有两种:

1、在Windows2008r2 x64 OS,在没有装Office2010客户端时,或没有安装“数据连接组件”

2、当前Web应用程序的应用程序池是64位的,而提供连接Excelprovider不支持当前64版本的操作系统

 

解决方法:

1方案:

安装MS的数据连接组件AccessDatabaseEngine(或安装office 2010客户端),并将当前承载通过oledb提供程序去访问Excel2010Web application对应的应用程序池“启用兼容32位应用程序”,

在对应的 IIS 应用程序池中,“设置应用程序池默认属性”右击/“高级设置”/"启用32位应用程序",设置为 true

 

2方案:

安装AccessDatabaseEngine_64版并且要安装64位版的office 2010客户端

下载地址:http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d

 

3方案:

若目标应用程序不能将应用程序池"启用兼容32位应用程序",只能在64位应用程序池下运行,且又想有上传Excel的功能,可按如下方式:

a、创建Asp.net WebService application 程序,并通过WebService来连接访问Excel

b、将此webservice application的应用程序池按方案1方式设置“启用兼容32位应用程序”。

c、在目标应用程序中添加此webservice

posted @ 2011-03-25 14:56 凡夫·俗子 阅读(333) 评论(0)  编辑

最近在项目中使用到了一个Word转换为HTML的功能,于是自己写了一个示例,关键代码如下:

// 存放word文件的完整路径
string  wordPath  =  Server.MapPath( " /word/test.doc " );
// 存放html文件的完整路径
string  htmlPath  =  Server.MapPath( " /html/test.html " );
            
// 上传word文件, 由于只是做示例,在这里不多做文件类型、大小、格式以及是否存在的判断
FileUpload1.SaveAs(wordPath);

#region  文件格式转换
// 请引用Microsoft.Office.Interop.Word
ApplicationClass word  =   new  ApplicationClass();
Type wordType 
=  word.GetType();
Documents docs 
=  word.Documents;

//  打开文件
Type docsType  =  docs.GetType();
object  fileName  =  wordPath;  // "f:\\cc.doc";
Document doc  =  (Document)docsType.InvokeMember( " Open " , BindingFlags.InvokeMethod,  null , ( object )docs,  new  Object[] { fileName,  true true  });

// 判断与文件转换相关的文件是否存在,存在则删除。(这里,最好还判断一下存放文件的目录是否存在,不存在则创建)
if  (File.Exists(htmlPath)) { File.Delete(htmlPath); }
// 每一个html文件,有一个对应的存放html相关元素的文件夹(html文件名.files)
if  (Directory.Exists(htmlPath.Replace( " .html " " .files " )))   

    Directory.Delete(htmlPath.Replace(
" .html " " .files " ),  true );
};

// 转换格式,调用word的“另存为”方法
Type docType  =  doc.GetType();
object  saveFileName  =  htmlPath;  // "f:\\aaa.html";
docType.InvokeMember( " SaveAs " , BindingFlags.InvokeMethod,  null , doc,  new   object [] { saveFileName, WdSaveFormat.wdFormatHTML });

//  退出 Word
wordType.InvokeMember( " Quit " , BindingFlags.InvokeMethod,  null , word,  null );

#endregion

以上代码,在.net framework4.0 中,可能会出一编译错误:

无法嵌入互操作类型“……”,请改用适用的接口

查阅资料,找到解决方案,记录如下:

选中项目中引入word的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。

 

下载源码:/Files/linyechengwei/WordToHTML.rar

目录
相关文章
|
15小时前
|
弹性计算 持续交付 Docker
阿里云云效产品使用合集之如何部署到阿里云服务器上的 Windows Server 上的 IIS?
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
7天前
|
网络协议 Unix 网络安全
FTP服务器怎么搭建?Windows server搭建FPT服务器
FTP服务器是按照FTP协议提供文件传输服务的计算机。它用于在两台计算机间安全地传输文件,支持用户权限管理和跨平台操作。FTP使用控制连接处理命令,数据连接传输文件,有PORT和PASV模式。要搭建FTP服务器,首先在Windows Server 2008 R2上安装IIS,确保选中FTP服务。接着,创建FTP文件夹作为站点根目录,通过IIS管理器添加FTP站点,配置站点信息、身份验证和权限。测试客户端通过telnet和浏览器访问FTP服务器,确认能成功登录及浏览文件。FTP常用于文件共享和管理,可通过专用工具如FlashFXP上传下载文件。
28 0
FTP服务器怎么搭建?Windows server搭建FPT服务器
|
22天前
|
网络虚拟化 Windows
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
20 1
|
29天前
|
Python Windows
在 Windows 平台下打包 Python 多进程代码为 exe 文件的问题及解决方案
在使用 Python 进行多进程编程时,在 Windows 平台下可能会出现将代码打包为 exe 文件后无法正常运行的问题。这个问题主要是由于在 Windows 下创建新的进程需要复制父进程的内存空间,而 Python 多进程机制需要先完成父进程的初始化阶段后才能启动子进程,所以在这个过程中可能会出现错误。此外,由于没有显式导入 Python 解释器,也会导致 Python 解释器无法正常工作。为了解决这个问题,我们可以使用函数。
28 5
|
13天前
|
前端开发 JavaScript 应用服务中间件
windows server + iis 部署若伊前端vue项目
5,配置url重写规则(重写后端请求) 注:如果没有Application Request Routing Cachefourcloudbdueclaim和URL重写,则是第二部的那两个插件没装上 打开iis,点击计算机->点击Application Request Routing Cache -> 打开功能
40 0
|
1月前
|
编解码 安全 网络安全
RealVNC的 VNC server在windows7系统下无法正确运行
在Windows 7上运行旧版VNC Server(如4.1.2)可能存在兼容性问题,但可通过调整配置解决。步骤包括:安装VNC Server,设置兼容性模式(选择Windows XP SP3),启动VNC Server,配置VNC连接参数。若遇到问题,检查防火墙设置,确保系统更新,并考虑升级到新版VNC Server以提高性能和兼容性。
|
2月前
|
开发框架 .NET API
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上成功运行.Net 8程序,需安装三个补丁:Windows Server 2008 R2 SP1 (KB976932)是基础更新;VC_redist.x64提供MSVC库支持;KB3063858解决.NET运行时加载`kernel.dll`的路径问题。KB3063858可能需要KB2533623。详细信息和下载链接在文中给出。
|
2月前
|
网络协议 Unix Linux
【技术分享】Server / Server Software / Unix Windows OS
Server / Server Software / Unix Windows OS
59 2
|
2月前
|
开发框架 .NET 数据库
修改windows server 2008 时间和日期格式
修改windows server 2008 时间和日期格式
32 1
|
2月前
|
SQL Windows
保姆级:Windows Server 2012上安装.NET Framework 3.5
保姆级:Windows Server 2012上安装.NET Framework 3.5
194 0