以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  生成指定excel文件的通用代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=4207)

--  作者:reachtone
--  发布时间:2009/9/3 20:30:00
--  生成指定excel文件的通用代码
本函数可实现以下功能:
1、根据指定表、指定列、指定表名生成excel文件;
2、如果目标文件名不存在,自动创建文件和sheet表;
3、如果目标文件已经打开,将给出提示;
4、如果目标文件存在同名表,可以选择追加,也可以选择覆盖。

函数名为ToList,调用方式为:
Functions.Execute("ToExcel",table,cols,sheetname,file,bl)
其中,table为要导出的table表名,Table型
        cols为要导出的列名,String型,如:A|B|C
        Sheetname为导出到excel中的表名,String型
        file为目标文件名
        bl为Boolean型,设为True时,自动覆盖同名表;否则将导出的数据添加在同名表后面。

函数ToList代码:

\'5个入口参数:0来源表\\1来源列\\2目标表名\\3目标文件\\4是否覆盖
Dim t As Table = Args(0)
\'定义工作簿
Dim Book As New XLS.Book
Dim Ss as String
If FileSys.FileExists(Args(3)) Then
    Book = New XLS.Book(Args(3))
    For i as Integer = 0 to Book.Sheets.Count - 1
        Ss = Ss & "," & Book.Sheets(i).Name
    Next
End If
Book.DefaultFont = New Font("宋体",9)
\'定义显示风格
Dim Style As XLS.Style
Style = Book.NewStyle() \'定义新样式
Style.BorderTop = XLS.LineStyleEnum.Thin
Style.BorderBottom = XLS.LineStyleEnum.Thin
Style.BorderLeft = XLS.LineStyleEnum.Thin
Style.BorderRight = XLS.LineStyleEnum.Thin
Style.BorderColorTop = Color.Black
Style.BorderColorBottom = Color.Black
Style.BorderColorLeft = Color.Black
Style.BorderColorRight = Color.Black
\'定义工作表
Dim Sheet As XLS.Sheet
Dim qsh as Integer = 0     \'默认起始行从0开始
If FileSys.FileExists(Args(3)) = False Then  \'如果文件不存在
    Sheet = Book.Sheets(0)
    Sheet.Name = Args(2)
Else
    If Ss.Contains(Args(2)) = False Then     \'如果同名表不存在
        Sheet = Book.Sheets.Add(Args(2))
    Else
        If Args(4) = False Then             \'如果不允许覆盖
            Sheet = Book.Sheets(Args(2))
            qsh = Sheet.Rows.Count + 1
        Else                                 \'如果允许覆盖,先删除同名表再重建
            Book.Sheets.Remove(Args(2))
            Sheet = Book.Sheets.Add(Args(2))
        End If
    End If
End If
Sheet.ShowGridLines = False
\'写入数据
Dim Cols as String() = Args(1).Split("|")
For c As Integer = 0 to Cols.Length - 1   \'添加列标题
    Sheet(qsh,c).Value = Cols(c)
    Sheet(qsh,c).Style = Style
Next
For r As Integer = 0 to t.Rows.Count - 1   \'填入数据
    For c As Integer = 0 to Cols.Length - 1
        Sheet(qsh + r + 1,c).Value = t.Rows(r)(c)
        Sheet(qsh + r + 1,c).Style = Style    \'单元格样式
    Next
Next
\'判断目标文件的有效性
If FileSys.FileExists(Args(3)) Then
    Try
        Dim f As New System.IO.FileStream(Args(3),IO.FileMode.Open,IO.FileAccess.Read,IO.FileShare.None)
        f.Dispose()
        Book.Save(Args(3))
        MessageBox.Show("数据已经成功导出! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Catch ex As Exception
        MessageBox.Show("目标文件处于打开状态, 系统无法保存! 请将其关闭后重新导出本表数据! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    End Try
Else
   Book.Save(Args(3))
   MessageBox.Show("数据已经成功导出! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
  
--  作者:lkqing
--  发布时间:2009/9/3 20:45:00
--  
收藏,学习,谢谢!
--  作者:yangming
--  发布时间:2009/9/3 21:11:00
--  
学习研究!加精!
--  作者:狐狸爸爸
--  发布时间:2009/9/3 21:26:00
--  


--  作者:czy
--  发布时间:2009/9/3 21:46:00
--  

又见精品,顶。


--  作者:blackzhu
--  发布时间:2009/9/4 8:05:00
--  

研究一下,调用不会。


--  作者:mr725
--  发布时间:2009/9/4 10:22:00
--  

万分感谢,只是没全懂,先收下,细琢磨琢磨 ~


--  作者:pyh6918
--  发布时间:2009/9/4 11:04:00
--  
收藏!谢谢!
--  作者:migold
--  发布时间:2009/9/4 11:35:00
--  
顶,
来迟了

我没用过,试试去