Foxtable(狐表)用户栏目专家坐堂 → excel报表数据引用


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

主题:excel报表数据引用

帅哥,在线噢!
ycs5801
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1096 积分:7794 威望:0 精华:0 注册:2009/6/24 9:44:00
excel报表数据引用  发帖心情 Post By:2025/1/19 10:48:00 [只看该作者]

在excel报表中,a表的第一列和第二列与b表的第一列,都有关联,想在b表的报表中根据关联列引用a表中对应的数据,应该怎样操作?是需要将a表与b表建立关联?还是直接引用。
示例:假如a表的第一列数值为1、3、5,第二列数值为4、7、8,a表的第一列和第二列数字都不在一个行,且都不相同。b表的第一列数值为1、3、5、4、7、8,现在想在b表的第二列调取对应a表的第三列数值。

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


加好友 发短信
等级:五尾狐 帖子:1096 积分:7794 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2025/1/19 19:53:00 [只看该作者]

'先判断是否都填报了
Dim nms() As String = {"TextBox1"}
For Each nm As String In nms
    If e.form.controls(nm).value = Nothing Then
        messagebox.show("请填写完整资料打印")
        Return
    End If 
Next


Dim cmd As New SQLCommand
cmd.C
Dim dt As DataTable
MessageBox.Show("1")
cmd.Comma ndText = "SE LECT 报检号 领用日期及编号 印刷流水号 From {列表项目} Wh ere 指定领用日期及编号='" & e.form.Controls("TextBox1").Value & "'"
dt = cmd.ExecuteReader() '生成一个临时表dt
MessageBox.Show("2")
dt.DataCols.Add("船名", GetType(String)) '生成3个临时列
dt.DataCols.Add("日期", GetType(Date))
dt.DataCols.Add("使用人", GetType(String))
MessageBox.Show("3")
For Each dr1 As DataRow In dt.DataRows '在已经生成的临时表中循环
    If dr1("报检号").SubString(6, 1) = "A" Then '如果是入境  
        Dim dr2 As DataRow = DataTables("检疫资料").sqlFind("[入境签证编号] = '" & dr1("报检号") & "'")
        If dr2 IsNot Nothing Then 
            dr1("船名") = dr2("中文船名")
            dr1("日期") = dr2("入境签证日期及时间")
            dr1("使用人") = dr2("入境检疫医师")
        End If
    ElseIf dr1("报检号").SubString(6, 1) = "C" Then '如果是出境  
        Dim dr3 As DataRow = DataTables("检疫资料").sqlFind("[入境签证编号] = '" & dr1("报检号") & "'")
        If dr3 IsNot Nothing Then 
            dr1("船名") = dr3("中文船名")
            dr1("日期") = dr3("入境签证日期及时间")
            dr1("使用人") = dr3("入境检疫医师")
        End If
    End If 
Next

Dim Book As New XLS.Book(ProjectPath & "Attachments\证书记录打印模版.xlsx")
Dim fl As String = ProjectPath & "Attachments\证书记录.xlsx"
Book.Build() '生成细节区
Book.Sheets(0).Rows.RemoveAt(0) '删除第一行,Excel报表的第一行通常是标记行
Book.Save(fl) '保存工作簿

Dim Proc As New Process '打开工作簿
Proc.File = fl
Proc.Start()

我自己写了代码先生成一个临时表,然后再填充数据,现在黄色部分程序运行不过去。这种方式可行吗?还是有别的方式?

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


加好友 发短信
等级:超级版主 帖子:111901 积分:569659 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/1/19 20:44:00 [只看该作者]

cmd.Comma ndText = "SE LECT 报检号 领用日期及编号 印刷流水号,'' as 船名,getdate() as 日期,'' as 使用人  From {列表项目} Wh ere 指定领用日期及编号='" & e.form.Controls("TextBox1").Value & "'"
dt = cmd.ExecuteReader() '生成一个临时表dt
MessageBox.Show("3")
For Each dr1 As DataRow In dt.DataRows '在已经生成的临时表中循环

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


加好友 发短信
等级:五尾狐 帖子:1096 积分:7794 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2025/1/19 22:41:00 [只看该作者]

按照上边修改还是不对。
报检号 领用日期及编号 印刷流水号,这三列是原来表中有的。船名、日期、使用人,这三列是我想后加的三列,一共六列。

 回到顶部
帅哥,在线噢!
ycs5801
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1096 积分:7794 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2025/1/19 23:06:00 [只看该作者]

cmd.Com mandText = "SEL ECT 报检号 领用日期及编号 印刷流水号,'' as 船名,getdate() as 日期,'' as 使用人  From {列表项目} W here 指定领用日期及编号='" & e.form.Controls("TextBox1").Value & "'"

这句对吗?好像还是生成不了

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


加好友 发短信
等级:超级版主 帖子:111901 积分:569659 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/1/19 23:07:00 [只看该作者]

Dim Book As New XLS.Book(ProjectPath & "Attachments\证书记录打印模版.xlsx")
Dim fl As String = ProjectPath & "Attachments\证书记录.xlsx"
book.AddDataTable("模板里使用的表名"dt)
Book.Build() '生成细节区
Book.Sheets(0).Rows.RemoveAt(0) '删除第一行,Excel报表的第一行通常是标记行
Book.Save(fl) '保存工作簿


 回到顶部
帅哥,在线噢!
ycs5801
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1096 积分:7794 威望:0 精华:0 注册:2009/6/24 9:44:00
上传  发帖心情 Post By:2025/1/19 23:17:00 [只看该作者]


以下内容是专门发给有点蓝浏览



 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:证书记录打印模版.xlsx

打开窗口管理,在“证书记录打印”窗口中,输入2025011701进行测试。


 回到顶部