求助操作excel出错 本帖最后由 GuoJl01 于 2011-03-23 13:45:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 office版本问题吧,全删除在重装下试试! 从网上找了个帖子:具体解决方法如下:1:在服务器上安装office的Excel软件.2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框5:点击"标识"标签,选择"交互式用户"6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.这样,我们便配置好了相应的Excel的DCOM权限.注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户由于EXCEL是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调用这个功能的时候再删除以前在服务器上所生成的所有Excel 在注册表中,删除提示的类库数据,然后重新安装office,即可。 不太建议用这种方式, 前提是客户端必须要有装有office ,如果没有就会报错, 强烈建议以流的方式 来处理,输出一个流,用户想保存什么格式都行,比如notepad 这个流怎么处理啊,以前没用过,给个例子?程序是一个datagridview保存成excel的。 没解决,改成输出csv了,不用excel。听说改成连接数据库就可以了,没试过。资料:1、环境配置:加入using System.OleDb 2、编写连接与操作excel文件的通用函数protected void DoOleSql(string sql, string database) { OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("\\") + database + "; Extended Properties='Excel 8.0;HDR=no;IMEX=0'"; try {//打开连接 conn.Open(); } catch (Exception e) { Response.Write(e.ToString()); } OleDbCommand olecommand = new OleDbCommand(sql, conn); try {//执行语句 olecommand.ExecuteNonQuery(); } catch (Exception eee) { Response.Write(eee.ToString()); conn.Close(); } finally { conn.Close();//关闭数据库 } conn.Close();}注:1)使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推);2)IMEX=1将所有读入数据看作字符,其他值(0、2)请查阅相关帮助文档;3)如果出现“找不到可安装的isam”错误,一般是连接字符串错误3、从excel文件读取数据string sql = "select * from [sheet1$]";DoOleSql(sql,"test.xls");4、更新excel文件中的数据string sql = "update [sheet1$] set FieldName1='333' where FieldName2='b3'";DoOleSql(sql,"test.xls");5、向excel文件插入数据string sql = "insert into [sheet1$](FieldName1,FieldName2,…) values('a',’b’,…)";DoOleSql(sql,"test.xls");6、删除excel文件中的数据:不提倡使用这种方法7、对于非标准结构的excel表格,可以指定excel中sheet的范围1)读取数据:string sql = "select * from [sheet1$A3:F20]";2)更新数据:string sql = "update [sheet1$A9:F15] set FieldName='333' where AnotherFieldName='b3'";3)插入数据:string sql = "insert into [sheet1$A9:F15](FieldName1,FieldName2,…) values('a',’b’,…)";4)删除数据:不提倡注:1)代码根据需要可以自行修改;2)如果出现“操作必须使用一个可更新的查询”错误,可能sql语句中对excel文件中的“字段”引用有错误,或对excel文件不具有“修改”权限;3)如果出现“不能扩充选定范围”错误,可能是对excel文件引用的“范围”有错误。 http://blog.csdn.net/wxw6782829/archive/2011/06/03/6525084.aspx C# Assembly反编译dll问题。 web.config 根目录、子目录设置问题 可以帮忙解决下这个问题吗? winform datagridview 滚动条定位 大批量相似去重 [分享小技巧]如何实现自定义文件的关联文件,内详+散分 处女贴 ,大家多支持 …… 急需时间型正则表达式 用C#实现“列出某Sybase服务器中的所有数据库名,及某一数据库下的所有数据表” 水晶报表打印的问题,穿孔纸名称 自动循环按钮,求代码 多个类,线程控制
这个流怎么处理啊,以前没用过,给个例子?程序是一个datagridview保存成excel的。
听说改成连接数据库就可以了,没试过。
资料:
1、环境配置:加入using System.OleDb
2、编写连接与操作excel文件的通用函数protected void DoOleSql(string sql, string database) { OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("\\") + database + "; Extended Properties='Excel 8.0;HDR=no;IMEX=0'"; try {//打开连接 conn.Open(); } catch (Exception e) { Response.Write(e.ToString()); } OleDbCommand olecommand = new OleDbCommand(sql, conn); try {//执行语句 olecommand.ExecuteNonQuery(); } catch (Exception eee) { Response.Write(eee.ToString()); conn.Close(); } finally { conn.Close();//关闭数据库 } conn.Close();}注:1)使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推);2)IMEX=1将所有读入数据看作字符,其他值(0、2)请查阅相关帮助文档;3)如果出现“找不到可安装的isam”错误,一般是连接字符串错误3、从excel文件读取数据string sql = "select * from [sheet1$]";DoOleSql(sql,"test.xls");4、更新excel文件中的数据string sql = "update [sheet1$] set FieldName1='333' where FieldName2='b3'";DoOleSql(sql,"test.xls");5、向excel文件插入数据string sql = "insert into [sheet1$](FieldName1,FieldName2,…) values('a',’b’,…)";DoOleSql(sql,"test.xls");6、删除excel文件中的数据:不提倡使用这种方法7、对于非标准结构的excel表格,可以指定excel中sheet的范围1)读取数据:string sql = "select * from [sheet1$A3:F20]";2)更新数据:string sql = "update [sheet1$A9:F15] set FieldName='333' where AnotherFieldName='b3'";3)插入数据:string sql = "insert into [sheet1$A9:F15](FieldName1,FieldName2,…) values('a',’b’,…)";4)删除数据:不提倡注:1)代码根据需要可以自行修改;2)如果出现“操作必须使用一个可更新的查询”错误,可能sql语句中对excel文件中的“字段”引用有错误,或对excel文件不具有“修改”权限;3)如果出现“不能扩充选定范围”错误,可能是对excel文件引用的“范围”有错误。