Foxtable(狐表)用户栏目专家坐堂 → [求助]Excel报表的页眉中能插入图片吗?


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

主题:[求助]Excel报表的页眉中能插入图片吗?

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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
[求助]Excel报表的页眉中能插入图片吗?  发帖心情 Post By:2017/8/11 11:50:00 [只看该作者]

请教老师:
      Excel报表的页眉中能插入图片吗?如果能插,如何用代码实现?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/11 11:56:00 [只看该作者]

 你在你的excel模板设置好页眉,插入图片。然后执行代码

 

Dim Book As New XLS.Book(ProjectPath & "Attachments\监造周报.xls")
Dim fl As String = ProjectPath & "Reports\监造周报.xls"
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
With Sheet.PrintSetting
    '页眉左边为日期,中间为时间,右边为表名
    .Header = "&L&D &C&T&G &R&F"
    ''在页脚右边打印页号和总页数
    .Footer = "&R第&P页,总&N页"
End With
Book.Build() '生成细节区
Book.Save(fl) '保存工作簿


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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2017/8/11 12:28:00 [只看该作者]

我想根据记录的内容插入 审核图片或 未审核图片,用代码能实现吗?

另外,"&L&D &C&T&G &R&F"不太明白,能解释一下吗

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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2017/8/11 12:46:00 [只看该作者]

excel模板设置好页眉,插入图片后,执行时发生“不能读取文件”的错误,删除掉页眉就不出现错误

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/11 14:19:00 [只看该作者]

以下是引用lzzhx在2017/8/11 12:28:00的发言:
我想根据记录的内容插入 审核图片或 未审核图片,用代码能实现吗?

另外,"&L&D &C&T&G &R&F"不太明白,能解释一下吗

 

你做两个模板,根据不同的内容调用不同的模板即可。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/11 14:26:00 [只看该作者]

以下是引用lzzhx在2017/8/11 12:46:00的发言:
excel模板设置好页眉,插入图片后,执行时发生“不能读取文件”的错误,删除掉页眉就不出现错误

 

测试了一下,没问题。

 

无论你是否写2楼的代码,只要你excel模板做了页眉,生成的报表,就是拥有页眉的。


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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/11 17:47:00 [只看该作者]

1、测试这段代码没问题

 

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("d:\123.xls")  '若模板的页眉中有图片,执行到此处就提示打不开文件.单独用Excel打开该临时文件,提示不能读取文件,且不能进行修复.若将页眉中的图片删除,则一切正常.
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
app.quit

 

2、build之后,不需要重新打开的,可以直接引用sheet的

 

Book.Build() '生成报表

Dim Sheet1 As XLS.Sheet = Book.Sheets(0)
 
3、build之前,sheet是模板,build之后,sheet是报表。

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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By: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算出来才对?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/11 18:15:00 [只看该作者]

 回复9楼,生成前生成后,数据会左移一列。要根据实际情况引用数据。

 回到顶部
总数 44 1 2 3 4 5 下一页