ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: xsxsxslch

[原创]EXCEL导出工作表为图片

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-11 16:03 | 显示全部楼层

看来对有些朋友还是有用的!

TA的精华主题

TA的得分主题

发表于 2008-5-11 18:02 | 显示全部楼层

非常感谢,这里面高手真多呀,我正好有好多客人发的比较杂的工作表需要转成图片,这样方便多了!

不过图片好像都比较大,能否能改小一点?

TA的精华主题

TA的得分主题

发表于 2008-5-11 18:06 | 显示全部楼层

给楼主一个函数,转成JPG的可能比较好!

'参数:
'  Range - 要保存为JPG图片的单元格区域,必要参数
'  FileName - 要保存的JPG图片目标路径,必要参数
'  quality - JPG图片质量,数值越大,图片质量越高,占用字节数越多,可选参数
'            取值范围为0-100,小于0则出现溢出错误,大于100则与100效果相同
'返回值:如果保存成功,返回True,否则返回False

Option Explicit
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type
Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type
Private Type EncoderParameter
    GUID As GUID
    NumberOfValues As Long
    type As Long
    Value As Long
End Type
Private Type EncoderParameters
    Count As Long
    Parameter As EncoderParameter
End Type
Private Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, ByVal outputbuf As Long) As Long
Private Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As Long
Private Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
'Private Declare Function GdipCreateBitmapFromFile Lib "GDIPlus" (ByVal filename As Long, Bitmap As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long '剪贴板
Private Declare Function CloseClipboard Lib "user32" () As Long

Const CF_BITMAP = 2


Public Function Range2JPG(Range As Range, ByVal filename As String, Optional ByVal quality As Byte = 80) As Boolean
   
    Dim tSI As GdiplusStartupInput
    Dim lRes As Long
    Dim lGDIP As Long
    Dim lBitmap As Long
    Dim hBitmap As Long
    '复制单元格区域图像
    Range.CopyPicture xlScreen, xlBitmap
    '打开剪贴板
    OpenClipboard 0&
    '获取剪贴板中bitmap数据的句柄
    hBitmap = GetClipboardData(CF_BITMAP)
    '关闭剪贴板
    CloseClipboard
    '初始化 GDI+
    tSI.GdiplusVersion = 1
    lRes = GdiplusStartup(lGDIP, tSI, 0)
    
    If lRes = 0 Then
        '从句柄创建 GDI+ 图像
         lRes = GdipCreateBitmapFromHBITMAP(hBitmap, 0, lBitmap)
        If lRes = 0 Then
            Dim tJpgEncoder As GUID
            Dim tParams As EncoderParameters
            
            '初始化解码器的GUID标识
            CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
            '设置解码器参数
            tParams.Count = 1
                With tParams.Parameter ' Quality
                '得到Quality参数的GUID标识
                CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID
                .NumberOfValues = 1
                .type = 4
                .Value = VarPtr(quality)
            End With
            
            '保存图像
            lRes = GdipSaveImageToFile(lBitmap, StrPtr(filename), tJpgEncoder, tParams)
            
            '销毁GDI+图像
            GdipDisposeImage lBitmap
        End If
        
        '销毁 GDI+
        GdiplusShutdown lGDIP
    End If
    

        Range2JPG = Not lRes
End Function

TA的精华主题

TA的得分主题

发表于 2008-5-11 18:07 | 显示全部楼层
QUOTE:
以下是引用xsxsxslch在2008-5-7 11:23:05的发言:

用Excel做了一上将工作表导出为图片的工具,希望大家能用得上:

以下是图片信息

初始界面--工作ING界面--完成界面

 


真是个好东西,我正需要。但VBA代码看不到,请指教。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-11 18:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢WindowXP提供此自定义函数,有空一定好好研究一下!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-11 18:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hbkeguojin兄,贴子有注明VBA密码的,请查看!

TA的精华主题

TA的得分主题

发表于 2008-5-11 20:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请问这种情况下如何看代码呀?

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-12 08:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
14楼的代码:

这个真不错,不知道能否有高手能讲解一下?

[此贴子已经被作者于2008-5-12 8:01:26编辑过]

TA的精华主题

TA的得分主题

发表于 2008-5-12 08:23 | 显示全部楼层

现在我知道一种在这种情况下看代码的方法,就是先打开VBA,然后再打开这个工具,VBA窗口是不会被隐藏的!

TA的精华主题

TA的得分主题

发表于 2008-5-12 08:26 | 显示全部楼层
QUOTE:
以下是引用xsxsxslch在2008-5-12 8:00:03的发言:
14楼的代码:

这个真不错,不知道能否有高手能讲解一下?


这是之前收集起来的,也没有用到,也不知道怎么用,会用了别忘了告诉我怎么用的,教我一下!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 20:10 , Processed in 0.032707 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表