如何导入数据至Excel文件 C#.net

    以下资料均从网上各类提问和博客中,整理出来。

 

    如果Excel不需要合并单元格,没有太复杂的格式,将数据库表格数据导入到Excel中,有一个非常简单的办法:

    1. 将数据读到DataTable对象中,然后绑定到一个ASP.NET的web控件DataGrid(可设置Visible为false)中

    2. 使用以下方法,将DataGrid的HTML内容使用Response对象输出到页面上来。

   

   

    如果Excel中需要合并单元格呢?例如:现在要列出一批订单数据,需要显示订单的总金额、运费以及订购产品和订购数量。

    一张订单跟产品的关联是一对多的关系,因此用在一张表格中显示出来,就无可避免遇到上述问题,而给出的第一种导出Excel方法,显然达不到效果,那么如何处理呢?

    首先要肯定的是,我们不可能通过操作DataTable或DataGrid达到合并单元格的效果,只有通过操作Excel对象才能达到要求。

    1. 首先保证机器安装了office 11,并安装了Excel。

    2. 在项目中添加引用,在com标签页中,找到“Microsoft Excel 11.0 Object Library”项,添加进来。

    3. 后台cs类中,需要引入以下命名空间:

    

    4. 利用Excel.ApplicationClass类,我们可以将DataTable中的列名与数据读出来,输出到Excel中,并可以具体操作到任意一个单元格,以下是我写的一个例子中的代码块:

   

 


 

    在调试过程中,我遇到了几个Bug:

    1). 异常来自 HRESULT:0x800A03EC。

         这个异常发生在“r = wksheet.get_Range(wksheet.Cells[rowIndex - 1, 1], wksheet.Cells[rowIndex, 1]);”,由于粗心导致,当wksheet.Cells中行与列的数值不对时,比如说行、列为“0”,就会报错了,仔细检查可以排除掉。

 

    2). 就是在合并单元格时,因为两个单元格都有数据,会提示合并单元格会选择左上角的数据,其他数据会被覆盖的确认对话框,每合并一个,弹出一个框,这个肯定是客户所不能接受的,后来添加这个属性设置之后“ac.DisplayAlerts = false; ”排除的。

 

    3). 第三个问题是最头疼的问题:现在已经拿到了想要的Excel了,可是我怎么将Excel展示给客户呢?上面的程序块中,将Excel写到了服务器上应用下的Order文件夹中,而客户却只能干瞪眼。

    这里我做了一个取巧的做法,那就是使用了一段客户端脚本:

   

    当前页面中,弹出一个窗口,窗口链接到Excel文件,那么客户会看到一个“打开/保存/取消”Excel文件的提示窗口,问题迎刃而解。

 

    4). 第四个问题较早解决了,那就是访问Excel.ApplicationClass的权限问题,这是在网上一些博客中找到的解决办法:

        (1) 开始->运行,输入“dcomcnfg”回车

        (2) 依次展开:组件服务->计算机->我的电脑->DCOM配置,找到“Microsoft Excel 应用程序”,右键属性

        (3) 弹出窗口中选择“标识”的标签页,勾中“交互式用户”

        (4) 选择“安全”标签页,将“启动与激活权限”、“访问权限”、“配置权限”全部选择自定义,然后分别点击“编辑”按钮,将ASPNET账户的权限添加进去即可。


补充:一些设置Excel格式的方法,这个是Copy自这位兄弟的Blog:http://blog.csdn.net/puleezi/archive/2007/06/24/1664098.aspx

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值