以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助] 导出Excel时合并单元格 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=175231) |
-- 作者:zcgmxf -- 发布时间:2022/2/24 14:56:00 -- [求助] 导出Excel时合并单元格 老师,如何实现导出时所有编号相同的自动合并?谢谢! |
-- 作者:有点蓝 -- 发布时间:2022/2/24 15:00:00 -- 使用什么方式导出的? 用这个:http://www.foxtable.com/webhelp/topics/0559.htm,导出前设置合并模式:http://www.foxtable.com/webhelp/topics/1373.htm
|
-- 作者:zcgmxf -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/2/25 14:51:00 -- 只能这样 |