注册 登录
编程论坛 VB6论坛

如何将 EXCEL 文件转换成图片

听水吟 发布于 2014-09-16 15:33, 2384 次点击
如何将EXCEL文件转换成图片,在网上找了一段程序,有很多错误,怎么改?
 Public Function ConvertExcelTOImage() As String  '将EXCEL转换成图片
 
        Dim excelFilePath As String
        excelFilePath = "E:\20140814EQ2008_Dll_VB\运行图甲.xls"
        
        Dim SaveExcelJPG As String
        SaveExcelJPG = "E:\20140814EQ2008_Dll_VB\1.jpg"
        
        Dim app As Microsoft.Office.Interop.Excel.Application
        app = New Microsoft.Office.Interop.Excel.Application
  
        app.CutCopyMode = False
        app.Visible = False
        
        Dim objMis As Object=Type.Missing
        
        Dim singleExcel As Microsoft.Office.Interop.Excel.Workbook
        singleExcel = app.Workbooks.Open(excelFilePath, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis)
        
        Try
            Dim wsheet As Microsoft.Office.Interop.Excel.Worksheet
            wsheet = singleExcel.Worksheets(1)
            
            Dim ranobj As Object
            ranobj = DBNull.Value
            
            wsheet.Range("A1", "Z106").Copy (ranobj)
            
            Dim iData As IDataObject
            iData = Clipboard.GetDataObject()
            
            Dim bits As Bitmap
            bits = iData.GetData(DataFormats.Bitmap)
            
            Dim myBitmap As Bitmap
            myBitmap=New Bitmap(bits.Width,bits.Height)
            
            Dim g As Graphics
            g = Graphics.FromImage(myBitmap)
            
            g.DrawImage(bits,0,0)
            
            myBitmap.Save(String.Format(SaveExcelJPG, Guid.NewGuid()))
            
            Clipboard.Clear()
            
            myBitmap.Dispose()
            
            bits.Dispose()
            
            Return ""
            
        Catch ex As Exception
            ' KillProcess("EXCEL")
            Return ex.Message
        Finally
            Clipboard.Clear()
            ' KillProcess("EXCEL")
        End Try
    End Function
9 回复
#2
砖家的谎言2014-09-17 09:20
顶下贴,大家帮忙看看
#3
风吹过b2014-09-17 15:20
Dim app As Microsoft.Office.Interop.Excel.Application
        app = New Microsoft.Office.Interop.Excel.Application
第一次看到这样的写法:
下面还有
        Dim singleExcel As Microsoft.Office.Interop.Excel.Workbook
        Try                                                            <- 看到这个关键字,你确定这是 VB6 的代码吗??

            Dim wsheet As Microsoft.Office.Interop.Excel.Worksheet


===============
原理看懂了。
         在 EXCEL中,有这个功能,复制的数据,可以粘贴为图片,然后再把这个图片 保存起来就是了。
#4
听水吟2014-09-17 15:30
回复 3 楼 风吹过 b
我也怀疑是不是应该是C的语句,要不怎么出现这么多错误,是我把它改成两句的它的原句是:
 Dim app As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application()

Dim singleExcel As Microsoft.Office.Interop.Excel.Workbook = app.Workbooks.Open(excelFilePath, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis)


Dim wsheet As Microsoft.Office.Interop.Excel.Worksheet = singleExcel.Worksheets(1)

我把它拆成两句,不然有错误显红色
#5
听水吟2014-09-17 15:33
回复 3 楼 风吹过 b
try
......
      catch
......
end try

这个VB里好像有吧,网上有查到有这种用法,但我也不知道哪里有问题,这段程序中catch 和end try也出错
#6
听水吟2014-09-17 15:48
把这段程序放在VB里是这样的
Public Function ConvertExcelTOImage() As String  '将EXCEL转换成图片
 
        Dim excelFilePath As String
        excelFilePath = "E:\20140814EQ2008_Dll_VB\运行图甲.xls"
        
        Dim SaveExcelJPG As String
        SaveExcelJPG = "E:\20140814EQ2008_Dll_VB\1.jpg"
        
        Dim app As Microsoft.Office.Interop.Excel.Application
        app = New Microsoft.Office.Interop.Excel.Application
  
        app.CutCopyMode = False
        app.Visible = False
        
       (1)Dim objMis As Object=Type.Missing
        
        Dim singleExcel As Microsoft.Office.Interop.Excel.Workbook
        singleExcel = app.Workbooks.Open(excelFilePath, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis, objMis)
        
        Try
            Dim wsheet As Microsoft.Office.Interop.Excel.Worksheet
            wsheet = singleExcel.Worksheets(1)
            
            Dim ranobj As Object
            ranobj = DBNull.Value
            
            wsheet.Range("A1", "Z106").Copy (ranobj)
            
            Dim iData As IDataObject
            iData = Clipboard.GetDataObject()
            
            Dim bits As Bitmap
            bits = iData.GetData(DataFormats.Bitmap)
            
            Dim myBitmap As Bitmap
          (2)myBitmap=New Bitmap(bits.Width,bits.Height)
            
            Dim g As Graphics
            g = Graphics.FromImage(myBitmap)
            
            (3)g.DrawImage(bits,0,0)
            
            (4)myBitmap.Save(String.Format(SaveExcelJPG, Guid.NewGuid()))
            
            (5)Clipboard.Clear()
            
            (6)myBitmap.Dispose()
            
            (7)bits.Dispose()
            
            (8)Return ""
            
        (9)Catch ex As Exception
            ' KillProcess("EXCEL")
            (10)Return ex.Message
        Finally
           (11) Clipboard.Clear()
            ' KillProcess("EXCEL")
        (12)End Try
    End Function

前面两个的错误是缺少语句结束,(3)缺少=号,(4)缺少(号,(5)(6)(7)(11)缺少=号
(8)缺少结束语句,(9)(10)缺少语句结束,(12)缺少:if或select或sub或function或property或type或with或ENUM或语句结束

#7
风吹过b2014-09-17 15:52
'打开 EXCEL
'选择需要复制的部分,进行复制

'----------以上部分,你自己百度再加补代码吧-------------

'粘贴部分
If Clipboard.GetFormat(vbCFBitmap) Then                 '是图片
    Picture1.AutoSize = True                            '开自动大小
    Picture1.Picture = Clipboard.GetData(vbCFBitmap)    '粘贴
    SavePicture Picture1.Picture, "D:\1.bmp"            '保存
End If
#8
风吹过b2014-09-17 15:59
(1)Dim objMis As Object=Type.Missing
VB6 不允许 定义时 给值。
所以你必须分二行写。
Dim objMis As Object
set objmis = Type.Missing             '这是引用已用的对象
'如果是新建对应,那么 是 set objmis =new Type.Missing  

(2)myBitmap=New Bitmap(bits.Width,bits.Height)
对象赋值,使用 set 关键字。

(3)g.DrawImage(bits,0,0)
(4)myBitmap.Save(String.Format(SaveExcelJPG, Guid.NewGuid()))
(5)Clipboard.Clear()
(6)myBitmap.Dispose()
(7)bits.Dispose()
(11) Clipboard.Clear()
VB6 过程调用有二种格式:
标准: call g.DrawImage(bits,0,0)
省略: g.DrawImage bits,0,0

            (8)Return ""
            (10)Return ex.Message
VB6 中,该命令仅用于 错误捕捉返回中,在正常运行时遇到,报错。

        (9)Catch ex As Exception
未知。在VB6 中,后来带类型的 关键字,只有定义变量的 三个关键字。


        (12)End Try
你确定这一大堆代码是 VB6 的代码吗?
VB6 不支持 Try 关键字。

[ 本帖最后由 风吹过b 于 2014-9-17 16:02 编辑 ]
#9
燕之峰2014-09-19 20:02
学习,学习。
#10
听水吟2014-10-11 15:10
回复 8 楼 风吹过 b
研究了很久,终于搞明白这段程序是,谢谢了!
1