以文本方式查看主题 - 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=194835) |
||||
-- 作者:ycs5801 -- 发布时间:2025/1/19 10:48:00 -- excel报表数据引用 在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 -- 发布时间: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() 我自己写了代码先生成一个临时表,然后再填充数据,现在黄色部分程序运行不过去。这种方式可行吗?还是有别的方式?
|
||||
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2025/1/19 22:41:00 -- 按照上边修改还是不对。 报检号 领用日期及编号 印刷流水号,这三列是原来表中有的。船名、日期、使用人,这三列是我想后加的三列,一共六列。
|
||||
-- 作者:ycs5801 -- 发布时间:2025/1/19 23:06:00 -- cmd.Com mandText = "SEL ECT 报检号 领用日期及编号 印刷流水号,\'\' as 船名,getdate() as 日期,\'\' as 使用人 From {列表项目} W here 指定领用日期及编号=\'" & e.form.Controls("TextBox1").Value & "\'" 这句对吗?好像还是生成不了
|
||||
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2025/1/19 23:17:00 -- 上传 以下内容是专门发给有点蓝浏览
打开窗口管理,在“证书记录打印”窗口中,输入2025011701进行测试。
|
||||
-- 作者:有点蓝 -- 发布时间:2025/1/20 8:48:00 -- Dim cmd As New SQLCommand cmd.ConnectionName = "chuanbojianguan" Dim dt As DataTable cmd.CommandText = "SELECT 报检号,领用日期及编号,印刷流水号,\'\' as 船名,getdate() as 日期,\'\' as 使用人 From {列表项目} Where 领用日期及编号=\'2025011701\'" dt = cmd.ExecuteReader() \'生成一个临时表dt dt.ReplaceFor("日期", system.DBNull.Value) For Each dr1 As DataRow In dt.DataRows \'在已经生成的临时表中循环 \' MessageBox.Show(dr1("报检号")) 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 & "证书记录打印模版.xlsx") Dim fl As String = ProjectPath & "证书记录.xlsx" book.AddDataTable("dt", dt) Book.Build() \'生成细节区 Book.Sheets(0).Rows.RemoveAt(0) \'删除第一行,Excel报表的第一行通常是标记行 Book.Save(fl) \'保存工作簿 Dim Proc As New Process \'打开工作簿 Proc.File = fl Proc.Start()
[此贴子已经被作者于2025/1/20 8:48:01编辑过]
|
||||
-- 作者:ycs5801 -- 发布时间:2025/1/20 9:11:00 -- 已经好用了。 dt.ReplaceFor("日期", system.DBNull.Value) 之前不好用,主要在这句吗?这句什么意思? book.AddDataTable("dt", dt) 还有这句的意思是不能直接使用生成的dt表吗?
|
||||
-- 作者:有点蓝 -- 发布时间:2025/1/20 9:56:00 -- dt.ReplaceFor("日期", system.DBNull.Value) 清空日期值,错误和这句没有什么关系,自己比较看看还改了哪里 book.AddDataTable("dt", dt) 肯定可以用:http://www.foxtable.com/webhelp/topics/3233.htm
|