C# Excel 操作 求一个好的方案

mrsupersky 2012-01-21 01:52:45
开源库 没一个OK的,
不是只支持97-2003的XLS
就是.net framework 有较高的版本要求.
要不就是只读不写
或者就设计要求安装office

其实我的要求很简单.
就是一个是库,另一个是 每周生成的文件

我需要把 每周生成的文件 中的每一行数据和库文件作比较

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,

然后.net 要求是2.0版本,客户机不安装office.

就这么简单...

可是现在尽然找不到一个适合的...
ADO.NET 也不行(不能删数据)。COM 需要安装Office

经验证 以下开源库 都不满足要求
 MyXls(http://sourceforge.net/projects/myxls/)

  Koogra(http://sourceforge.net/projects/koogra/)

  ExcelLibrary(http://code.google.com/p/excellibrary/)

  ExcelPackage(http://excelpackage.codeplex.com/)

  EPPlus(http://epplus.codeplex.com/)

  LinqToExcel(http://code.google.com/p/linqtoexcel/)

  NetOffice(http://netoffice.codeplex.com/) 需安装Office Excel


求相对较好的解决方案
...全文
383 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrsupersky 2012-02-06
  • 打赏
  • 举报
回复
问题已经解决
Excel2007使用OpenXml读取
导出使用ADO+Excel2003
p2227 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 shigaofei1 的回复:]

引用 17 楼 p2227 的回复:

引用 11 楼 shigaofei1 的回复:

引用 10 楼 p2227 的回复:

就是一个是库,另一个是 每周生成的文件

我需要把 每周生成的文件 中的每一行数据和库文件作比较

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,---那你想让操作excel文件人如何看到这个变化呢?文件正在打开的时候突然就删……
[/Quote]天啊。。居然有服务器没数据库。。。。好吧,我吐槽完了

你服务器上的“库”也是一个excel??反正也没关系吧,你能读那个文件即可,如果你找不到删除的方法,可以转变成写,把上传的文件一条条写到新文件里,如果有重复,则不写
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 p2227 的回复:]

引用 11 楼 shigaofei1 的回复:

引用 10 楼 p2227 的回复:

就是一个是库,另一个是 每周生成的文件

我需要把 每周生成的文件 中的每一行数据和库文件作比较

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,---那你想让操作excel文件人如何看到这个变化呢?文件正在打开的时候突然就删除了一行?

我的程序使用对话框打开选定……
[/Quote]

[Quote=引用 9 楼 shigaofei1 的回复:]
服务器没有数据库可用...
[/Quote]
注意看9楼的这条
p2227 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shigaofei1 的回复:]

引用 10 楼 p2227 的回复:

就是一个是库,另一个是 每周生成的文件

我需要把 每周生成的文件 中的每一行数据和库文件作比较

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,---那你想让操作excel文件人如何看到这个变化呢?文件正在打开的时候突然就删除了一行?

我的程序使用对话框打开选定两个文件的地址 一个处理按钮
下方有一个进度条,表示……
[/Quote]所以你不需要对原来的文件进行增删改的操作,只需要查即可,把所有的的资料读进数据库,在数据库里该干嘛干嘛,然后把处理完的结果生成一个新的excel文件就行了
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zanfeng 的回复:]

excel就是一个文件。从office官网下载文件格。对着填东西不就可以了。
codeproject有开源的读写的。

真不清楚。很多搞excel的。为什么非要搞的这么复杂。
[/Quote]


格式还是相当复杂的,不然也没有这么多人搞开源搞到现在还搞不出个好东东了,
除了2007的open xml
主要还涉及到97-2003的二进制格式问题。

格式文件已经下载下来了,再看,可是E文N多,尽管我E懂一点点,但是看起来还是有点吃力。。。
startstartsvip 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 shigaofei1 的回复:]

引用 12 楼 tteagle 的回复:

aspose可以完美的解决这个问题。

不免费啊>_<
[/Quote]

csv 也算 excel 多简单也免费

足球中国 2012-01-21
  • 打赏
  • 举报
回复
excel就是一个文件。从office官网下载文件格。对着填东西不就可以了。
codeproject有开源的读写的。

真不清楚。很多搞excel的。为什么非要搞的这么复杂。
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tteagle 的回复:]

aspose可以完美的解决这个问题。
[/Quote]
不免费啊>_<
tteagle 2012-01-21
  • 打赏
  • 举报
回复
aspose可以完美的解决这个问题。
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 p2227 的回复:]

就是一个是库,另一个是 每周生成的文件

我需要把 每周生成的文件 中的每一行数据和库文件作比较

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,---那你想让操作excel文件人如何看到这个变化呢?文件正在打开的时候突然就删除了一行?
[/Quote]
我的程序使用对话框打开选定两个文件的地址 一个处理按钮
下方有一个进度条,表示处理过程中每周文件 的当前处理 索引除以总条数的百分比

所有行全部处理完成 显示MessageBox.Show("OK");

然后,直接将处理过的 每周的那个文件通过 网络发送给 歌库小组就OK了
p2227 2012-01-21
  • 打赏
  • 举报
回复
就是一个是库,另一个是 每周生成的文件

我需要把 每周生成的文件 中的每一行数据和库文件作比较

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,---那你想让操作excel文件人如何看到这个变化呢?文件正在打开的时候突然就删除了一行?
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 p2227 的回复:]

引用 7 楼 shigaofei1 的回复:

引用 4 楼 p2227 的回复:

直接把正确的导出来,让客户来选择覆盖与否就好了嘛

客户是把 缺歌写在 意见卡上,
门店人员将意见卡上的缺歌录入到Excel里面,
然后各个门店每周上传到总部汇总,
然后就是我要做的比对工作。。。

所以客户是没法选择的。
那就更加简单了啊,全部Excel读进数据库,除重,再把正确的输出……
[/Quote]

我们的目的不是要告诉门店 数据输入不对,客户有可能会输入与歌库中重复的歌曲
但是门店工作人员在汇总意见卡时是 不能访问数据库等的,而且访问了也没什么好处
因为与其输入 一个名称去检索 结果 还不如直接全部录入然后统一管理 筛选...

服务器没有数据库可用...

作为一个开发人员,我的观点是让自己开发的软件不携带任何多余的环境以及其他限制,

环节越多 出错的概率也就越多,逻辑也越复杂,管理也麻烦,资源占用也越大,但是 多几个DLL文件是最佳选择...

"
曾经我想 要是 .net 的程序可以 把运行时的程序和类库文件 单独拿出来就好了...
按需取库,然后将所有的exe,dll等文件直接大哥包 就行了,那该多方便啊..."
当然这些是题外话,所以我还是希望可以有一个 能对Excel直接进行操作的 库,不开源也没问题,关键是
符合上面的要求,还有就是 免费...


p2227 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shigaofei1 的回复:]

引用 4 楼 p2227 的回复:

直接把正确的导出来,让客户来选择覆盖与否就好了嘛

客户是把 缺歌写在 意见卡上,
门店人员将意见卡上的缺歌录入到Excel里面,
然后各个门店每周上传到总部汇总,
然后就是我要做的比对工作。。。

所以客户是没法选择的。
[/Quote]那就更加简单了啊,全部Excel读进数据库,除重,再把正确的输出成Excel,然后直接告诉各个门店,你们输入的都不对,以我输出的为准。你为啥要煞费苦心对上传的excel文件进行操作呢
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 p2227 的回复:]

直接把正确的导出来,让客户来选择覆盖与否就好了嘛
[/Quote]
客户是把 缺歌写在 意见卡上,
门店人员将意见卡上的缺歌录入到Excel里面,
然后各个门店每周上传到总部汇总,
然后就是我要做的比对工作。。。

所以客户是没法选择的。
wuha555 2012-01-21
  • 打赏
  • 举报
回复
ADO删除数据不行,过滤好了,先把数据修改成特定格式,然后读进来的时候写个过滤的方法即可。
chenkaiqiang 2012-01-21
  • 打赏
  • 举报
回复
看不太懂!
p2227 2012-01-21
  • 打赏
  • 举报
回复
直接把正确的导出来,让客户来选择覆盖与否就好了嘛
mrsupersky 2012-01-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 p2227 的回复:]

如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,

那你的excel文件都存着些什么东西
[/Quote]

是歌曲数据,统计的时候是客人一个个写出来的,然后有相关人员统一录入到Excel表格中,现在 我需要一个程序来筛选这些 歌曲(主要根据歌名和和歌手比对是否重复)。

(这往后就不是我的事情了)比对完了这些数据要交给 歌曲制作人员查找并制作出歌库中没有的歌曲。然后放入歌库

我不需要打开文件,打开文件会使用UI,反而影响执行的速度。。。

而且关键是,服务器上没有安装Office,也不希望安装...
p2227 2012-01-21
  • 打赏
  • 举报
回复
如果发现库文件中已经存在这条记录,那每周的文件中就将相应的记录删除,

那你的excel文件都存着些什么东西
qldsrx 2012-01-21
  • 打赏
  • 举报
回复
不明白你为啥不肯安装Office,不安装的话,导出了也打不开,那还不如使用xml文件来存储更好(excel是可以打开xml格式的文件的)
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧