Foxtable(狐表)用户栏目专家坐堂 → [求助] 导出Excel时合并单元格


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

主题:[求助] 导出Excel时合并单元格

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


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
[求助] 导出Excel时合并单元格  发帖心情 Post By:2022/2/24 14:56:00 [只看该作者]

老师,如何实现导出时所有编号相同的自动合并?谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:采样单.xls



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107881 积分:548774 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/24 15:00:00 [只看该作者]

使用什么方式导出的?


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


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2022/2/24 16:40:00 [只看该作者]

老师,可能是WPS干扰,合并模式不能保存。不知道黄色代码怎么循环。谢谢!

Dim dt As Table = Tables("核酸采样明细")
Dim nms() As String = {"试 管编号","姓名","证件编号","联系电话","检测结果","采样日期","检测机构"} '要导出的列名
Dim caps() As String = {"试 管编号","姓名","证件号码","联系电话","核酸检测结果(阴性/阳性)","核酸检测时间","核酸检测机构"} '要导出的列名
Dim szs() As Integer = {150,120,200,150,200,200,280} '对应的列宽
Dim Book As New XLS.Book '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.AlignHorz = XLS.AlignHorzEnum.Center
Style.AlignVert = XLS.AlignVertEnum.Center
Dim drs As List(of DataRow) = DataTables("核酸采样明细").Select("试 管编号 = '" & dt.Current("试 管编号") & "'")
Dim n As Integer = drs.Count 
Sheet.MergeCell(n,0,drs.Count,1)
Dim st As XLS.Style = Book.NewStyle '日期列的显示格式
st.For mat = "yyyy-MM-dd hh:mm"
Fo r c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) '指定列标题
    Sheet.Cols(c).Width = szs(c) '指定列宽
    If dt.Cols(nms(c)).IsDate Then '如果是日期列
        Sheet.Cols(c).Style = st '设置显示格式
    End If
    Sheet.Cols(c).Style = Style
Next
Fo r r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Sheet.Rows(r).Height = 38
    F or c As Integer = 0 To nms.length -1
        Sheet(r +1, c).Value = dt.rows(r)(nms(c))
        Dim s As String = Sheet(r+1, 3).Value
        Sheet(r+1, 3).Value = s.Replace("(-)","")
    Next
Next
Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog 
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
     Tables("核酸采样明细").SaveExcel(dlg.FileName, "核酸检测采样表")  '保存文件
    Dim Proc As New Process
    Proc.File = dlg.FileName
    Proc.Start()
End If

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107881 积分:548774 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/24 16:47:00 [只看该作者]

去掉黄色代码

dim idx as integer = 0
Fo r r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Sheet.Rows(r).Height = 38
    F or c As Integer = 0 To nms.length -1
if r > 0 then
if dt.rows(r)(“试 管编号”) <> dt.rows(r-1)(“试 管编号”) then
Sheet.MergeCell(idx,0,r-idx,1)
idx = r
end if
end if
        Sheet(r +1, c).Value = dt.rows(r)(nms(c))
        Dim s As String = Sheet(r+1, 3).Value
        Sheet(r+1, 3).Value = s.Replace("(-)","")
    Next
Next

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


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2022/2/25 14:33:00 [只看该作者]

老师,要加上一行黄色代码,不然最后一组相同编号的不合并,不知有没有更好的办法。谢谢!

Dim idx As Integer = 0
For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Sheet.Rows(r+1).Height = 38
    For c As Integer = 0 To nms.length -1
        Sheet(r +1, c).Value = dt.rows(r)(nms(c))
        Dim s As String = Sheet(r+1, 3).Value
        Sheet(r+1, 3).Value = s.Replace("(-)","")
        If r > 0 Then
            If dt.rows(r)("试 管编号") <> dt.rows(r-1)("试 管编号") Then
                Sheet.MergeCell(idx+1,0,r-idx,1)
                idx = r
            End If
                Sheet.MergeCell(idx+1,0,r-idx+1,1)
        End If
    Next
Next
[此贴子已经被作者于2022/2/25 14:33:17编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107881 积分:548774 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/25 14:51:00 [只看该作者]

只能这样

 回到顶部