当前位置:   article > 正文

使用.net导出Excel的两种不同方法(一)_.net downloadbystreamresult导出多个excel

.net downloadbystreamresult导出多个excel

最近有个需要实现将数据库中数据导出Excel文件的功能,其中Excel文件内容并不是简单的二维表,而是需要根据不同情况将数据分类,中间还要插入描述文字和统计数据等。

 

决定使用微软自带的控件 ,开发机器安装的是office2003,所以引用的是  Excel 11.0 objcet liberay

 

因为是winform程序,所以这个组件的要求是执行程序的机器必须安装相应版本的office2003.

 

以下是建立一个新的工作表类代码:

 

 Dim ac As Microsoft.Office.Interop.Excel.Application = New Excel.Application()

           If ac Is System.DBNull.Value Then
               MessageBox.Show("没有安装office,或版本不正确")
               Return
            End If

            ac.Visible = False
           ac.DisplayAlerts = False
           ac.ScreenUpdating = False

           Dim wkbook As Excel.Workbook = ac.Workbooks.Add(True)

           Dim wksheet As Excel.Worksheet = wkbook.ActiveSheet

 

后边就可以以这个wksheet为基础进行各种写操作了。

 

这个微软的控件的最大好处就是功能非常强大,而且使用起来感觉比较合理。(后边会有比较)

 

以下是设置表格样式功能,可以像下边这样直接定义一个指定区域的样式,也可以定义单个cell的样式。

 

 

'''''设置表头

          wksheet.Cells(3, 1) = "测试表头"

            Dim toprange As Excel.Range = wksheet.Range(wksheet.Cells(3, 1), wksheet.Cells(3, 7))
            toprange.MergeCells = True

            toprange.RowHeight = 30
            toprange.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            toprange.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
           toprange.Font.Size = 16
           toprange.Font.Bold = True

 

 

最后可以将文件保存

 

ac.SaveAs("filenam")

 

这里要说明的是使用ac.save会弹出一个让你选择保存路径的窗口,使用wksheet.save("filename"),就只能保存在预先定义好的位置,不能让用户来选择。

但实际使用中有个问题,ac.savesa()虽然能弹出一个另存文件的窗口,但是这个窗口总是出现在winform程序主form的后边,也就是说,你不最小化主form是看不到这个弹出窗口的,测试了很多次都这样,估计web程序可能不会有问题,没试过,不过winform肯定是有问题的。

 

解决方法是 自行添加一个SaveFileDialog控件。

 

然后

 

 

  SaveFileDialog1.DefaultExt = "xls"
          SaveFileDialog1.Filter = "Excel文件|*.xls"
            SaveFileDialog1.FileName = "Shee1.xls"

           If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

                wkbook.SaveCopyAs(SaveFileDialog1.FileName)

           End If

 

这样可以就可以了。

 

还有一个问题就是,使用这个方法导出完Excel文件,有时(其实是绝大多数情况)会出现倒出来的Excel文件打不开,后来从任务管理器中发现,有残余的Excel进程(EXCEL.EXE),这个问题比较苦恼,最后使用了个简单的办法(但是这种办法由问题,可能误杀别的excel进程,也就是说如果你还开着别的Excel文件,可能一并关闭掉了)

 

   Dim ps() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses()
          For i As Int16 = 0 To ps.Length - 1

                If (ps(i).ProcessName.ToUpper() = "EXCEL") Then
                  ps(i).Kill()
              End If


         Next

不过这个方法确实解决了当前问题。

 

 

最后一个问题就是微软这个组件功能强大,但是导出速度相当的慢,因为很多地方都要控制样式。

 

 

 

 

 

使用.net导出Excel的两种不同方法(二)

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/216005
推荐阅读
相关标签
  

闽ICP备14008679号