以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]Excel报表的页眉中能插入图片吗? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=105094) |
-- 作者:lzzhx -- 发布时间:2017/8/11 11:50:00 -- [求助]Excel报表的页眉中能插入图片吗? 请教老师: Excel报表的页眉中能插入图片吗?如果能插,如何用代码实现?
|
-- 作者:有点甜 -- 发布时间:2017/8/11 11:56:00 -- 你在你的excel模板设置好页眉,插入图片。然后执行代码
Dim Book As New XLS.Book(ProjectPath & "Attachments\\监造周报.xls") |
-- 作者:lzzhx -- 发布时间:2017/8/11 12:28:00 -- 我想根据记录的内容插入 审核图片或 未审核图片,用代码能实现吗? 另外,"&L&D &C&T&G &R&F"不太明白,能解释一下吗
|
-- 作者:lzzhx -- 发布时间:2017/8/11 12:46:00 -- excel模板设置好页眉,插入图片后,执行时发生“不能读取文件”的错误,删除掉页眉就不出现错误 |
-- 作者:有点甜 -- 发布时间:2017/8/11 14:19:00 -- 以下是引用lzzhx在2017/8/11 12:28:00的发言:
我想根据记录的内容插入 审核图片或 未审核图片,用代码能实现吗? 另外,"&L&D &C&T&G &R&F"不太明白,能解释一下吗
你做两个模板,根据不同的内容调用不同的模板即可。 |
-- 作者:有点甜 -- 发布时间:2017/8/11 14:26:00 -- 以下是引用lzzhx在2017/8/11 12:46:00的发言:
excel模板设置好页眉,插入图片后,执行时发生“不能读取文件”的错误,删除掉页眉就不出现错误
测试了一下,没问题。
无论你是否写2楼的代码,只要你excel模板做了页眉,生成的报表,就是拥有页眉的。 |
-- 作者:lzzhx -- 发布时间:2017/8/11 17:27:00 -- 以下代码,请老师看看,特别是红色部分有问题。整个代码结构请老师给修改优化一下 Dim sz() As String If tb.Cols.Contains("部门编号") = True Then sz = Functions.Execute("dwcjgq",tb.Current("部门编号")).split("|") End If Dim ppcs() As String Dim file As String Dim img As image Dim tm As String Dim fl As String = ProjectPath & "Attachments\\报表模板\\$$$临时文件.xls" If FileIsOpened(fl)= True Then ShowAppWindow("$$$临时文件.xls",5) End If Select Case tb.name Case "房屋台账" tm = ProjectPath & "Attachments\\报表模板\\房屋台账模板.xls" \'指定模板文件 End Select If FileSys.FileExists(tm) = False Then Messagebox.Show("报表模板文件【" & tm & "】不存在 !" & vblf & "请联系系统超级管理员 !","提示", MessageBoxButtons.OK, MessageBoxIcon.Error) Return False End If Dim Book As New XLS.Book(tm) \' 定义一个工作簿" \'对标记进行更新 Book.Marks.Add("tihuan单位简称",sz(1)) Book.Marks.Add("tihuan所属车间",sz(3)) Book.Marks.Add("tihuan所属工区",sz(5)) Dim Sheet As XLS.Sheet = Book.Sheets(0) \'With sheet.PrintSetting \'.Header = "&L&D &C&T&G &R&F" \'End With Book.Build() \'生成报表 Book.Save(fl) Dim Book1 As New XLS.Book(fl) Dim Sheet1 As XLS.Sheet = Book1.Sheets(0) Select Case tb.name Case "房屋台账" file = ProjectPath & "RemoteFiles\\" & tb.Current("照片") img = getImage(file) ppcs = Functions.Execute("tupian",Sheet1,img,10,24,4,15).split("|") ’这个函数主要是计算出最终要显示的图片位置和大小。 Sheet1(4,9).Value = New \'此处疑问:10,24 是图片单元格所占的列,在模板中该单元格的位置是10-24,在生成的临时文件中是9-23 4,9是图片单元格位置,在模板中该单元格的位置是4,10,在生成的临时文件中是4,9 试了多次,为什么计算位置时要引用模板中该单元格的位置,而插入图片时又要引用临时文件中单元格的位置?此时应该都引用临时文件中单元格的位置才对呀。 XLS.Picture(img,Cint(ppcs(0)),Cint(ppcs(1)),Cint(ppcs(2)),Cint(ppcs(3))) If tb.Current("审核人").trim(" ") <> "" Then Sheet1(1,22).Value = New XLS.Picture(GetImage("已审核.png"),-30,-20,95,60) Else Sheet1(1,21).Value = New XLS.Picture(GetImage("未审核.png"),-30,-20,95,60) End If End Select Book1.Save(fl) \'保存工作簿 Dim App As New MSExcel.Application Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(fl) \'若模板的页眉中有图片,执行到此处就提示打不开文件。单独用Excel打开该临时文件,提示不能读取文件,且不能进行修复。若将页眉中的图片删除,则一切正常。 Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) \'With Ws.PageSetup \'\'设置打印区域 \'\'\'\'.PrintArea = "A1:H10" \'打印工作表的指定区域 \'\'\'\'.PrintArea = Ws.UsedRange.Address \'打印工作表的使用区域 \'\'\'\'.PrintTitleColumn = Ws.Column("A:H").Address \'打印列标题(在每一页的左边重复出现) \'\'\'\'.PrintTitleRows = Ws.Rows(1).Address \'打印行标题(在每一页的顶部重复出现) \'\'设置页面 \'.PaperSize = MSExcel.XlPaperSize.XlPaperA4 \'纸张大小 \'.LeftMargin = 19 \'页面左边距 \'.RightMargin = 14 \'页面右边距 \'.TopMargin = 25 \'页面上边距 \'.BottomMargin = 15 \'页面下边距 \'.HeaderMargin = 8 \'页眉顶边距 \'.FooterMargin = 8 \'页脚下边距 \'\'\'\'.CenterHorizontally = True \'页面水平居中 \'\'\'\'.CenterVertically = True \'页面垂直居中 \'\'\'\'设置页眉 \'\'\'.LeftHeader = "打印日期:" & MyDate \'左页眉 \'\'\'.CenterHeader = "&""隶书,常规""&16 " & tb.name \'中页眉 \'\'\'\'.RightHeader = "已审核.png" \'"打印者:" & _UserName \'右页眉 \'\'\'.Header = "&L&D &C&T&G &R&F" \'\'设置页脚 \'.LeftFooter = "" \'左页脚 \'.CenterFooter = "第 &P 页 共 &N 页" \'中页脚 \'.RightFooter = "" \'右页脚 \'\'打印模式 \'.Orientation = MSExcel.XlPageOrientation.XlPortrait \'纵向打印 \'\'\'\'.Orientation = MSExcel.XlPageOrientation.XlLandscape \'横向打印 \'\'\'\'.PrintHeadings = True \'打印行号和列标 \'\'\'\'.PrintGridlines = True \'打印网格线 \'\'缩放打印 \'\'\'\'.Zoom = False \'以下设置将缩印在一页内 \'\'\'\'.FitToPagesWide = 1 \'按照1页的宽度打印 \'\'\'\'.FitToPagesTall = 1 \'按照1页的高度打印 \'End With \'\'\'\'wb.save \'\'\'\'Book1.Save(fl) \'保存工作簿 App.visible = True ShowAppWindow("$$$临时文件.xls",2) If e.StripItem.Name = "预览" Then Ws.PrintPreview Else Ws.PrintOUT End If App.Quit [此贴子已经被作者于2017/8/11 17:28:10编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/8/11 17:47:00 -- 1、测试这段代码没问题
Dim App As New MSExcel.Application
2、build之后,不需要重新打开的,可以直接引用sheet的
Book.Build() \'生成报表 Dim Sheet1 As XLS.Sheet = Book.Sheets(0)
3、build之前,sheet是模板,build之后,sheet是报表。
|
-- 作者:lzzhx -- 发布时间:2017/8/11 17:57:00 -- 此处疑问:10,24 是图片单元格所占的列,在模板中该单元格的位置是10-24,在生成的临时文件中是9-23 4,9是图片单元格位置,在模板中该单元格的位置是4,10,在生成的临时文件中是4,9 试了多次,为什么计算位置时要引用模板中该单元格的位置,而插入图片时又要引用临时文件中单元格的位置?此时应该都引用临时文件中单元格的位置才对呀。 这个是build之后,sheet是报表,为什么引用方式不同?把10-24引用改成9-23,算出来的单元格宽度不对,必须是10-24算出来才对?
|
-- 作者:有点甜 -- 发布时间:2017/8/11 18:15:00 -- 回复9楼,生成前生成后,数据会左移一列。要根据实际情况引用数据。 |