返回信息流我要同时用到用户上传的5个excel文件,每个文件一个sheet,通过oledb指定sql语句联接这5个表,但是oledb一次只能打开一个文件,这样的话,必须使这5个sheet都在一个excel文件里面,现在能想到的办法就是每次用户上传这5个文件的时候我再在服务器做个加工,将这5个excel的5个sheet拷贝到一个新的excel文件里面,之后再读这个文件。除开这个还有其他办法吗?
顺便问一下大家,将多个excel文件的sheet挪到一个excel文件上,有没有什么比较好的方法,多谢了!
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3402同步于 2011/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
.net 有办法同时操作多个excel文件吗
sora
2011/10/24镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
谢谢!但是我需要用sql语句将这几个sheet联接起来,也就是将每个sheet当做一个table来操作,如果都揉到一个数据结构还是没法实现。
只能将每个sheet临时保存到一个数据库中。然后再做联接操作。
举个例子,你把sheet1的数据读到一个List<T1>中,把sheet2的数据读到List<T2>中,注意好变量生命周期,别让回收,到时对sheet1和sheet2的操作就变成对这两个泛型的操作
using Excel=Microsoft.Office.Interop.Excel
...//
Excel.Application... Excel.Workbook... Excel.WrokSheet...
用封装好的Excel对象操作,把几个sheet加入到DataSet 再操作
【 在 ahomer 的大作中提到: 】
: using Excel=Microsoft.Office.Interop.Excel
: ...//
: Excel.Application... Excel.Workbook... Excel.WrokSheet...
: ...................
大家估计还不理解我意思。
我举个例子,如果在一个excel有3个sheet,我可以这样
SELECT [sheet1$].编号, [sheet2$].名称, t2.价格 from ([sheet2$] left join [sheet3$] on [sheet2$].名称 = [sheet3$].名称) as t2, [sheet1$], [sheet2$]
做链接操作,然后结果保存到datatable。
如果按照大家说的,尽管我可以获得3个datatable,但是这3个datatable无法做联接操作啊。
我给你举个例子,你sheet1有价格和名字,sheet2有价格和名字
可以构建一个对象
class pro
{
public string name{get;set;}
public int price{get;set;}
}
然后你把sheet1的数据读出来填充到一个泛型List<pro>中,令为L1,接着把sheet2读出来填充另一个泛型,令为L2
以前对多表的SQL连表查找现在变成对L1和L2的操作,它每一个的pro对象的name和price属性就是从数据表中查出的数据。你可以写逻辑对其进行操作。