以文本方式查看主题

-  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")
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
--  发布时间: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
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
--  发布时间: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楼,生成前生成后,数据会左移一列。要根据实际情况引用数据。