Foxtable(狐表)用户栏目专家坐堂 → 求助,如何导出表结构的代码


  共有19041人关注过本帖树形打印复制链接

主题:求助,如何导出表结构的代码

帅哥哟,离线,有人找我吗?
blackzhu
  21楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/1/14 15:27:00 [只看该作者]

累死我了,终于做好了:

 

Dim flg As New SaveExcelFlags
Tables("A").SaveExcel("E:\表A.Xls","表A",flg)
Dim Book As New XLS.Book("E:\表A.Xls") '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Sheet.Rows.Insert(0) '在最前面插入一行
Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.ForeColor = Color.Red
Dim fnt As New Font("黑体",12,FontStyle.Underline)
Style.Font= fnt
Style.AlignHorz = XLS.AlignHorzEnum.Center
Style.AlignVert = XLS.AlignVertEnum.Center
Dim dt As Table = Tables("A")
For c As Integer = 0 To dt.Cols.Count '添加列标题
    Sheet.MergeCell(0,0,1,c)
    Sheet(0,0).Value = "导入"
    Sheet.Rows(0).Height = 50
    Sheet.Cols(0).Width = 100
    Sheet(0,0).Style = Style
Next
Book.Save("E:\表A.Xls")
Dim Proc As New Process
Proc.File = "E:\表A.Xls"
Proc.Start()

 

 

 EXCEL编程,强烈要求加上自动列宽和行高的属性:

 

 这个是VBA的.

 

Rg.EntireColumn.AutoFit   '自动调整列宽
Rg.EntireRow.AutoFit 


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  22楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/1/14 15:29:00 [只看该作者]

如果要包括行号在内,代码是:

 

Dim flg As New SaveExcelFlags
flg.RowNumber = True
flg.CellStyle = True
Tables("A").SaveExcel("E:\表A.Xls","表A",flg)
Dim Book As New XLS.Book("E:\表A.Xls") '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Sheet.Rows.Insert(0) '在最前面插入一行
Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.ForeColor = Color.Red
Dim fnt As New Font("黑体",12,FontStyle.Underline)
Style.Font= fnt
Style.AlignHorz = XLS.AlignHorzEnum.Center
Style.AlignVert = XLS.AlignVertEnum.Center
Dim dt As Table = Tables("A")
For c As Integer = 0 To dt.Cols.Count '添加列标题
    Sheet.MergeCell(0,0,1,c+1)
    Sheet(0,0).Value = "导入"
    Sheet.Rows(0).Height = 50
    Sheet.Cols(0).Width = 100
    Sheet(0,0).Style = Style
Next
Book.Save("E:\表A.Xls")
Dim Proc As New Process
Proc.File = "E:\表A.Xls"
Proc.Start()


 回到顶部
帅哥哟,离线,有人找我吗?
小猪鑫鑫
  23楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:832 积分:5867 威望:0 精华:6 注册:2011/5/27 11:41:00
  发帖心情 Post By:2012/1/14 22:11:00 [只看该作者]

效果很好,谢谢楼主,学习并收藏了

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/1/14 22:23:00 [只看该作者]

效果其实是不理想的,当然这不是老朱的问题,而是老六的问题。

假设是多层表头,而其中又有某列(或某些列)不是多层表头的,再用插入行和合并单元格就会有问题了。

 

希望老六解决一下。


 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/1/14 22:43:00 [只看该作者]

C版说的不错,用blackzhu的代码,看看这张图: 

 


图片点击可在新窗口打开查看此主题相关图片如下:未命名0.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2012/1/14 23:40:00 [只看该作者]

我搞出来了,就是挺复杂的,看看能否整理一下代码。


图片点击可在新窗口打开查看此主题相关图片如下:未命名1.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  27楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/1/15 8:09:00 [只看该作者]

昨日考虑线取消合并,再添加,但是这样的效果出来后就不是原来的表结构了.

 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6833 积分:43228 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/1/15 8:14:00 [只看该作者]

 贴出我的代码,很好用,有兴趣的朋友,可以试一试。

 

Dim flg As New SaveExcelFlags
'flg.RowNumber = True
flg.CellStyle = True
Dim t As Table=Tables("" & e.form.name & "_table1")
'获取可见列的列数
Dim n As Integer=0
For Each c As col In t.cols
    If c.visible=True
        n=n+1
    End If
Next
n=math.min(n,t.cols.count)
t.SaveExcel("E:\表A.Xls","表A",flg)

Dim App As New MSExcel.Application
App.Visible = True
Dim Wb As MSExcel.Workbook = App.WorkBooks.Open("E:\表A.Xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range
For Each c As col In t.cols
    If c.Isnumeric AndAlso c.caption<>"年" AndAlso c.caption<>"月" AndAlso c.caption<>"日"
        Ws.Range(Ws.Cells(1,c.Index+1), Ws.Cells(100,c.Index+1)).NumberFormat = "#,##0.00" '会计专用
    End If
Next
'设置标题
Rg = Ws.Range("1:1")
Rg.Insert(MSExcel.XlInsertShiftDirection.xlShiftDown)
Dim Rg1 As MSExcel.Range
Rg1 = Ws.Range(Ws.Cells(1,1), Ws.Cells(1,n))   '设置标题的范围
App.DisplayAlerts = False
Rg1.Merge         '合并
Rg1.Value =e.Form.controls("表名称").text   '设置标题
rg1.HorizontalAlignment = MSExcel.Constants.xlCenter '水平居中
With Rg1.Font
    .Name = "黑体" '字体
    .Size = 20 '字号
    .Bold = True   '加粗
    .Italic = True '斜体
    '  .ColorIndex = 3 '颜色            '标题设置字体等
End With
Rg1.EntireColumn.AutoFit   '自动调整列宽
Rg1.EntireRow.AutoFit
Rg1 .WrapText =True '引用单个单元格
'设置日期
Rg = Ws.Range("2:2")
Rg.Insert(MSExcel.XlInsertShiftDirection.xlShiftDown)
'Dim Rg1 As MSExcel.Range
Rg1 = Ws.Range(Ws.Cells(2,1), Ws.Cells(2,n))   '设置标题的范围
App.DisplayAlerts = False
Rg1.Merge         '合并
Rg1.Value =e.Form.controls("日期").text   '设置标题
rg1.HorizontalAlignment = MSExcel.Constants.xlCenter '水平居中
With Rg1.Font
    .Name = "黑体" '字体
    .Size = 12 '字号
    '.Bold = True   '加粗
    '.Italic = True '斜体
    ' .ColorIndex = 3 '颜色            '标题设置字体等
End With
Rg1.EntireColumn.AutoFit   '自动调整列宽
Rg1.EntireRow.AutoFit
Rg1 .WrapText =True '引用单个单元格
Ws.PrintPreview                 '预览


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6833 积分:43228 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/1/15 8:14:00 [只看该作者]

就是感觉代码太长。

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  30楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/1/15 8:36:00 [只看该作者]

用了VBA.

 回到顶部
总数 46 上一页 1 2 3 4 5 下一页