当前位置:编程学习 > C#/ASP.NET >>

关于excel导入导出问题

大家好:
环境:Windows server 2008 R2 64位
office 2010 64位
数据库:SQL Server 2008 64位

使用ACE引擎打开excel,excel是03版本的,也有07版本的,现在就按2003版本来说。

发现的问题,导入的时候,发现sheet带连接符"-"或空格(测 试)就不能导入成功,请问大家有没遇到过这种问题,并求解决方法,谢谢! --------------------编程问答-------------------- sheet  名字带上 ' '  单引号试试 --------------------编程问答-------------------- 最好改变一下sheet命名方式阿 --------------------编程问答-------------------- 学习了,前几天刚做完一个,表示没遇到过楼主说的情况,若卤煮解决了,分享下,谢谢啊 --------------------编程问答--------------------
引用 2 楼 wind_cloud2011 的回复:
最好改变一下sheet命名方式阿


因为这是客户从供应商的系统下载的excel文档,所以更改sheet的方式行不通,一份excel有十几个sheet,其中带连字符"-"的至少7个。 --------------------编程问答-------------------- 可以在导入前检测,然后改名再导入 --------------------编程问答-------------------- 用这个GetOleDbSchemaTable函数先返回架构信息。在读取表名试一下。。 --------------------编程问答-------------------- 应该不会吧,不过可以换个思路,现获取这个表的所有工作簿集合,然后通过循环的方式。。 --------------------编程问答-------------------- 你用npoi读取试一下 --------------------编程问答--------------------
引用 8 楼 wind_cloud2011 的回复:
你用npoi读取试一下


NPOI的缺陷是导入的excel必须格式是excel,现在客户导入的文件有从xml强转成xls的。

我已经解决了这个问题。 --------------------编程问答-------------------- http://www.cnblogs.com/lwme/archive/2011/11/18/npoi_excel_import_export.html

 IWorkbook workbook = new HSSFWorkbook(stream);//从流内容创建Workbook对象
        ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作表,不需要表名
        IRow row = sheet.GetRow(0);//获取工作表第一行
        ICell cell = row.GetCell(0);//获取行的第一列
        string value = cell.ToString();//获取列的值
--------------------编程问答-------------------- 解决了就好!!! --------------------编程问答--------------------
引用 5 楼 a33440521 的回复:
可以在导入前检测,然后改名再导入


目前采用的这种方法,已经解决了。

我是先单独调试打开一个xls文件,看看sheet是否有问题,使用select * form [A-B$]就可以打开了。 --------------------编程问答-------------------- 谢谢大家的热心帮忙,这个问题已经解决了。具体的解决方案思路如下:

1、根据程序抛出的异常来排查问题,具体问题具体分析;
2、排查excel导入异常,可采用单独一条语句来读取excel,先绕开系统的业务;
3、在数据库里采用JET或ACE引擎打开excel,文件必须与数据库在同一台机器上,如果打开excel是在程序里,则数据库无关远程或本地,数据库打开excel的好处是sql语句读写方便,程序打开Excel则是后续可支持数据库与程序独立存放(多服务器),主要还是根据业务来;
4、这次解决的方法:
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\97-2003.xls', 'select * from [Sheet1$]')


参考链接:http://www.cnblogs.com/chencidi/archive/2011/11/19/2255359.html

这哥们总结的很全,基本方式都已经有了。
以上,供后来遇到此问题者参考,谢谢大家的帮忙了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,