我需要开发一个服务并将其安装到w2003框中以读取excel文件然后处理其信息。过程如下,用户将使用FTP上传excel文件,然后我的服务必须获取这些文件,验证然后更新SQL Server数据库。
应用程序在我的计算机上正常运行,但在服务器上它要求库,但是当我尝试安装MS Office 2003主互操作程序集时,系统显示“请在安装产品之前安装Microsoft Office 2003”。
我宁愿远离任何服务器升级,因为我们应该要求OK等等。所以,有一种简单的方法来只读取excel文件而无需在服务器中安装任何更新。
欢迎任何评论。
谢谢, m0dest0。
PS。使用vb.net和vs 2008。
答案 0 :(得分:2)
MS不支持在服务器上使用Interop - 请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2
由于Windows Vista MS引入了一些与安全相关的措施,这些措施阻止Windows服务执行“类似桌面”的操作......这意味着您必须绕过一些安全措施才能使其工作(不推荐!)。
要在服务器场景中处理Excel,有几个选项(免费和商业):
我可以推荐Aspose.Cells和Flexcel ...没试过SpreadsheetGear但是听到+读了很多关于它的好东西......
免费选项(仅适用于较新的xlsx格式!)例如OpenXML 2 from MS和EPPlus。
答案 1 :(得分:0)
对于在任何最新版本的Windows Server上都没有安装的解决方案.....我不确定确切的VB.NET代码,但您应该能够轻松地在任何使用Microsoft OLEDB的计算机上执行此操作应该可以在任何最新版本的Windows服务器上使用的驱动程序,或者可以通过Microsoft网站免费下载用于非常旧版本的Windows服务器的驱动程序。我会尝试伪代码,所以你必须适应VB.NET。请注意,为了按名称引用您的字段,工作表中所选区域的第一行必须包含列值中的字段名。否则,您只需使用数值来按列位置索引每个返回的字段。
Set objExcelConnection = CreateObject("ADODB.Connection")
objExcelConnection.Provider = "Microsoft.Jet.OLEDB.4.0"
objExcelConnection.ConnectionString = "Data Source=d:\path\to\excel\file\on\your\server.xls;Extended Properties=""Excel 8.0;IMEX=1;"";"
objExcelConnection.CursorLocation = 3
objExcelConnection.Open
sSQL = "select * from [worksheetname$]"
set rsWorksheet = objExcelConnection.Execute(sSQL)
do while not rsWorksheet.Eof
sValue = rsWorksheet("FieldName")
rsWorksheet.MoveNext
loop
rsWorksheet.Close
set objExcelConnection = nothing
答案 2 :(得分:0)
当我需要处理Excel文件时,我使用Excel数据读取器(http://exceldatareader.codeplex.com/)。它可以毫不费力地处理xls和xlsx文件,并且我已经在服务器操作系统上的一些应用程序中运行它。它将每个工作表保存为DataTable对象,DataTable中的每个“单元”对应具有相同地址的Excel单元。根据您设置SQL Server链接的方式,将内容转储到数据库中可能不需要太多转换。