首页 > 其他分享 >ACCESS 用EXCEL打印报表

ACCESS 用EXCEL打印报表

时间:2023-11-30 15:58:58浏览次数:25  
标签:excelApp 报表 rs EXCEL Chr ACCESS Range 13 Columns

ACCESS报表真是一言难尽啊.看预览还挺正经的.

 结果,放大之后 ,它裂开了,我也裂开了....打印出来,谁看谁尴尬...

 调整了很久,还是解决不了,于是愤而改EXCEL.效果如下:

 

Private Sub Command647_Click()  '打印.点击后禁用此按钮,待操作完成后再恢复,如果你的代码可能出问题,可以加入容错语句
        Command647.Enabled = False
        CopySelectedRecordsToExcel
        Command647.Enabled = True
End Sub

Function GetNames() As String
    Dim rs As Recordset, n As Integer, names As String
    Set rs = CurrentDb.OpenRecordset("select distinct 申购人 from 刀具申购明细 where 选择=-1 ")
    n = rs.RecordCount
    rs.MoveFirst
    For i = 0 To n - 1
        names = names & "," & rs.Fields(0).Value
        rs.MoveNext
    Next
    rs.Close
    Set rs = Nothing
    GetNames = Mid(names, 2, 100)
End Function

Sub CopySelectedRecordsToExcel()Dim rs As Recordset
    Dim strSQL As String
    Dim excelApp As Object
    Dim excelWorkbook As Object
    Dim excelWorksheet As Object
    Dim headerRange As Object
    
    Set excelApp = CreateObject("Excel.Application")
    Set excelWorkbook = excelApp.Workbooks.Add
    Set excelWorksheet = excelWorkbook.Sheets.Add
    Set rs = CurrentDb.OpenRecordset("FQ刀具申购清单")
    Set headerRange = excelWorksheet.Range("A1").Resize(1, rs.Fields.Count)
    fieldIndex = 1
    For Each fld In rs.Fields   '填充表头
        headerRange.cells(5, fieldIndex).Value = fld.Name
        fieldIndex = fieldIndex + 1
    Next fld
    With excelWorksheet
        .Range("A6").CopyFromRecordset rs   '填充数据
        '设置格式
        .Range("A1") = "东莞市华鑫精密有限公司"
        .Range("A1").Font.Size = 24
        .Range("A2") = "采 购 申 请 单"
        .Range("A2").Font.Size = 20
        .Range("A2").Font.Underline = True    '领料单加下划线
        .Range("A1:J2").HorizontalAlignment = 7   '跨列居中
        .Range("A5:J5").HorizontalAlignment = -4108   '标题居中
        .Range("A5").CurrentRegion.Borders.LineStyle = True   '主体加边框
        .Range("A4").Value = "申购人: " & GetNames
        .Range("h3").Value = "申购日期: " & DLookup("max(申购日期)", "刀具申购明细", "选择=-1")
        .Range("H4").Value = "申购单号: " & DLookup("申购单号", "刀具申购明细", "选择=-1")

        If Len(DHS) > 60 Then .Range("H2").Font.Size = 8
         .cells.Font.Name = "微软雅黑"       '设置字体
        
         
        '设置列宽
        .Columns("A:A").ColumnWidth = 8.8
        .Columns("B:B").ColumnWidth = 33.25
        .Columns("C:E").ColumnWidth = 5
        .Columns("F:F").ColumnWidth = 8.63
        .Columns("G:G").ColumnWidth = 11.88
        .Columns("H:H").ColumnWidth = 13
        .Columns("I:I").ColumnWidth = 10
        .Columns("H:I").ShrinkToFit = True  '自动缩小
        .Range("H3:H4").ShrinkToFit = False
        .Columns("J:J").ColumnWidth = 5
        .Columns("J:J").HorizontalAlignment = -4108        '设置行高.这里的赋值的EXCEL VBA不一样,我也是查了官方文档才知道的.
        .cells.RowHeight = 25
        .Rows("1:2").RowHeight = 28.5
        '打印设置.其实队了记录以外的数据,都应该放在页眉和页脚才对.我也是做完之后才想通的.需要注意的是,有很多属性的赋值是和EXCEL VBA是不一样的.
        With .PageSetup
            .PaperSize = 144    '设置A5R纸张.如果你不知道纸张的ID,可以用EXCEL的宏录制功能,然后看源代码
            ' 边距设置为 0
            .LeftMargin = excelApp.InchesToPoints(0)
            .RightMargin = excelApp.InchesToPoints(0)
            .HeaderMargin = excelApp.InchesToPoints(1.1)
            .centerHeader = "&""-,加粗""&10第 &P 页,共 &N 页, " & DCount("*", "刀具申购明细", "选择=-1") & "  行"
            .TopMargin = excelApp.InchesToPoints(0)
            .BottomMargin = excelApp.InchesToPoints(0.71)
            .PrintTitleRows = "$1:$5"   ' 顶端标题行设置.
            .FooterMargin = excelApp.InchesToPoints(0.17)
            .LeftFooter = "&""-,加粗""&10仓库签名: " & Chr(13) & Chr(13) & Chr(13) & "副总签名:"
            .CenterFooter = "&""-,加粗""&10科长签名:" & Chr(13) & Chr(13) & Chr(13) & Chr(13)
            .RightFooter = "&""-,加粗""&10经理签名:                           " & Chr(127) & Chr(13) & Chr(13) & Chr(13) & "总经理签名:                           " & Chr(127)
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = False
        End With
    End With
    excelApp.Visible = True
'    excelApp.Dialogs(xlDialogPrint).Show    '弹出系统打印对话框,这里我测试有问题
'    excelWorksheet.PrintOut '打印
'    excelWorkbook.Close False
'    excelApp.Quit
    ' 释放对象
    rs.Close
    Set rs = Nothing
'    Set excelApp = Nothing
End Sub

chr(127)是用来占坑的,不然它左边的空格会被页脚吃掉.

这里顺便说一下,指定一页打印多少行的问题.只要设置行高就可以了

.cells.RowHeight = 25
.Rows("1:2").RowHeight = 28.5

 

标签:excelApp,报表,rs,EXCEL,Chr,ACCESS,Range,13,Columns
From: https://www.cnblogs.com/yoooos/p/17867528.html

相关文章

  • Excel 选择性粘贴
    选择......
  • excel有两列数据,第一列条码,第二列数量为1,如何把相同条码的行,数量汇总
    要将相同条码的行的数量汇总,可以使用Excel的"数据透视表"功能。按照以下步骤进行操作:确保你的数据包含两列:第一列是条码,第二列是数量。选中你的数据范围,包括条码和数量列。在Excel菜单栏中选择"插入"选项卡。在"插入"选项卡中,找到并点击"数据透视表"按钮。这将打开"创......
  • WPS Excel如何设置下拉框
    Excel作为一款强大的电子表格软件,提供了各种功能来帮助用户更便捷地管理和分析数据。其中,设置下拉框是一种常用的技巧,可以简化数据输入过程,减少错误。下面我们将介绍如何在Excel中设置下拉框。第一步:打开一个需要设置下拉选项的wps表格。第二步:选中单元格,在菜单栏“数据”中,单......
  • 为获取导入百分比,使用easyexcel获取导入excel表总行数
    背景分批读取大量数据的excel文件,每次读取1000行数据,然后插入数据库,并且去执行一个方法,执行完毕后更新此行数据的状态。需要获取已更新数据的占比,即计算百分比。因为是分批读取的,我们不可以直接用已更新状态数量/数据库中总数。因为可能一次读取的1000行数据更新状态很快,直接100......
  • 使用C#将几个Excel文件合并去重分类
    需要将几个Excel表格里面的数据去重,然后将每个站点的数据另存为一张Sheet上。几个表格如下所示: 实现效果如下所示: 具体实现需要使用EPPlus操作Excel安装EPPlus如下所示: 为了更好的演示与说明,把步骤进行了拆分,先导入Excel数据,再去重,再进行数据分类,最后再导出为Excel......
  • Excel 常规操作
    查找定位可以将所有空单元的值填上......
  • Windows10+Qt+OpenCV出现“ACCESS_MASK”: 不明确的符号
    一、概述背景:Qt+OpenCV一模一样的代码在Mac上运行是正常的,在Windows10上运行就会报一下错误。“ACCESS_MASK”:不明确的符号二、原因及解决方案原因:OpenCV4.5.3的命名空间usingnamespacecv;和windows中的ACCESS_MASK定义冲突,在windows.h头文件中。......
  • ASP.NET的EXCEL批量导入操作
    前端代码:<tdclass="auto-style74"style="text-align:right"><asp:FileUploadID="FileUpload"runat="server"/><asp:LabelID="notice"runat="server&......
  • Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法五)
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公处理的问题,一起来看看吧。上一篇文章中,我们已经看到了四种解决办法了,这一篇文章我们一起来看看另外一种方法。二、实现过程这里【论草莓如何成为冻干莓】给了unstack()操作的方法,代码如下......
  • 盘点一个Excel表格数据筛选的问题(中篇)
    大家好,我是皮皮。一、前言前几天有粉丝问我Excel数据筛选的问题,原始数据如下图所示,其实一开始的总学时是字符串格式,我直接在wps里边进行了批量转换为数据操作,下面一起来看看需求吧。粉丝的需求是根据原始表格,然后填充下表:二、实现过程这里其实使用Excel就可以实现,这里介绍两个方法,......