2016-12-02 135 views
1

我有一个代码,可以将excel中的图像导出到一个picturebox中,在这里。如何使用OpenOffice Spreadsheet从Excel文件中获取图像

Dim appExcel As Object 



     Set appExcel = CreateObject("Excel.Application") 
     appExcel.Visible = False 
     Dim xlsBook As New excel.Workbook 
     Dim xlsSheet As New excel.Worksheet 

     Dim rowlocation As Integer 
     Dim columnlocation As Integer 
     Dim celladdress As String 



     Set xlsBook = appExcel.Workbooks.Open(Text1.Text) 
     Set xlsSheet = xlsBook.Worksheets("Sheet1") 
    Dim x As excel.Shapes 



     For Each x In xlsSheet.Shapes 
      x.Copy 
      Picture1.Picture = Clipboard.GetData(vbCFBitmap) 
      Text2.Text = x.Name 
      rowlocation = x.TopLeftCell.Row 
      columnlocation = x.TopLeftCell.Column 
      celladdress = xlsSheet.Cells(x.BottomRightCell.Row + 1, x.TopLeftCell.Column).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
      MsgBox ActiveSheet.Range(celladdress) 
     Next 

    End If 

不幸的是,这段代码不会在我的朋友PC上工作,因为他没有安装Excel,但他有OpenOffice电子表格。我试图在OpenOffice中打开Excel,然后打开文件,我的目标是如何在OpenOffice中转换上面的代码?我的意思是运行OpenOffice文件的代码。

这是我的代码,但它不工作

Dim objServiceManager As Object 
    Dim objDesktop  As Object 
    Dim objDocument  As Object 
    Dim objText   As Object 
    Dim objCursor   As Object 
    Dim oDoc    As Object 
    Dim ARG() 
    Dim oGraph As Object 
    Dim oView  As Object 
    Dim oDrawPage As Object 
    Dim oSheet As Object 
    Dim Image  As System_Drawing.Image 
    Dim oimage As Object 
    Dim osize As Object 

    Set objServiceManager = CreateObject("com.sun.star.ServiceManager") 
    Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop") 
    Set oDoc = objDesktop.loadComponentFromURL("file:///C:\Users\paul\Desktop\Testing.ods", "_blank", 0, ARG()) 
    Set oSheet = oDoc.getSheets().getByIndex(0) 
    Set oGraph = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape") 
    Set oView = oDoc.CurrentController 
    Set oDrawPage = oView.getActiveSheet.DrawPage 


    For i = 0 To 2 
     For j = 0 To 9 
      ' Form1.Image1.Picture = Clipboard.GetData 

      Form1.Image1.Picture = LoadPicture(oDrawPage) 
     Next 
    Next 

TYSM为今后帮助

这是在VB6最新的代码,它有一个错误说vnd.sun.star缺少

Dim objServiceManager As Object 
    Dim objDesktop  As Object 
    Dim objDocument  As Object 
    Dim objText   As Object 
    Dim objCursor   As Object 
    Dim oDoc    As Object 
    Dim ARG() 
    Dim oGraph  As Object 
    Dim oView  As Object 
    Dim oDrawPage As Object 
    Dim oSheet  As Object 
    Dim Image  As System_Drawing.Image 
    Dim oimage  As Object 
    Dim osize  As Object 
    Dim Cell  As Object 
    Dim sGraphicUrl As String 
    Dim oDisp 
    Dim oFrame 
    Dim opos  As Object 



    Set objServiceManager = CreateObject("com.sun.star.ServiceManager") 
    Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop") 
    Set osize = objServiceManager.Bridge_GetStruct("com.sun.star.awt.Size") 
    Set opos = objServiceManager.Bridge_GetStruct("com.sun.star.awt.Point") 
    Set oDoc = objDesktop.loadComponentFromURL("file:///C:\Users\paul\Desktop\ACE Express - Fairview_Sample PC of Gondola.ods", "_blank", 0, ARG()) 
    Set oSheet = oDoc.getSheets().getByIndex(0) 
    Set oimage = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape") 
    Set oView = oDoc.CurrentController 
    Set oDrawPage = oView.getActiveSheet.DrawPage 
    Set oimage = oDrawPage.getByIndex(0) 
    Image1.Picture = LoadPicture(oimage.GraphicURL) 

这里是解压缩图象的输出

enter image description here

+0

更多的这个问题在这里问:http://stackoverflow.com/questions/40927324/how-to-use-openoffice-spreadsheet-to-get-an-image-from-an-excel-file。 –

+0

这个问题的一些问题也在这里问:http://stackoverflow.com/questions/40986697/openoffice-error-vnd-sun-star-graphicobject。 –

+0

是的,先生,那我,先生请帮我转换为VB6 :(TYSM的帮助 –

回答

0

我从来没有尝试过但是according to the docs你可以通过COM自动控制Open Office。

您上面的VB6代码是通过COM自动控制Excel。您可以在您的机器上安装Open Office,然后查看您是否可以通过VB6自动运行Calc以打开电子表格并提取图像。我不知道它是否允许。 Excel COM自动化功能非常强大,可以让你几乎做任何事情,Open Office可能没有那么强大(我不知道)。

我会建议仔细考虑你试图解决什么问题,以及是否有另一种方法完全!

+0

其实有2用户的系统第一个使用Excel的他们创建一个格式在Excel中,并发送到用户2,但用户2只有openoffice的好处是,excel可以在开放办公室打开,但上面的代码将工作,如果用户2将有excel但他们没有使用它我的目标是如何转换上面的代码,以便它可以导入excel无需安装excel应用程序 –

+0

除非安装了Excel,否则您无法“导入Excel”您可能可以“导入Open Office”,这就是我的答案所在。请参阅[link](https://www.openoffice .org/udk/common/man/tutorial/office_automation.html)或者将用户1的图片或“格式”传输到用户2,而不使用excel文件;如果用户2没有Excel,则最好使用另一种格式。 – MarkJ

+0

主席先生,感谢您的努力而即时消息差不多在一半以内,现在我的问题是如何将电子表格中的图像导入到图片框中? –

1

我不确切知道你的代码是干什么的,因为我通常不使用Microsoft Office。不过,看起来这个任务可以使用OpenOffice Basic完成。学习OpenOffice Basic的最佳地点之一是Andrew Pitonyak's Macro Document

首先,看5.9.5. Convert all linked images

编辑

要在Calc中做到这一点,首先我去Tools -> Macros -> Organize Dialogs并创建了一个名为“ImageViewerForm”与名为“MyImageControl”图像控制对话框。

然后我去Tools -> Macros -> Organize Macros -> OpenOffice Basic并添加以下代码:

Sub ShowImageViewerDialog 
    oDoc = ThisComponent 
    oDlg = CreateUnoDialog(DialogLibraries.Standard.ImageViewerForm) 
    oControl = oDlg.Model.MyImageControl 
    oDrawPage = oDoc.getDrawPages().getByIndex(0) 
    oImage = oDrawPage.getByIndex(0) 
    oControl.ImageURL = oImage.GraphicURL 
    oDlg.execute() 
End Sub 

运行的代码,请Tools -> Macros -> Run Macro。下面是结果:

enter image description here

“下一个图像”按钮应该是相当简单添加一个事件处理程序来实现。

有关文档,请参见GraphicObjectShapeUnoControlButtonModel。但大多数情况下我只是使用MRI tool来弄清楚。

编辑2

关于您发布的错误,在这种情况下,GraphicURL属性是引用的内存对象,而不是文件路径的字符串。字符串示例如下所示:https://www.openoffice.org/api/docs/common/ref/com/sun/star/graphic/XGraphicObject.html

所以它不适合传递给LoadPicture,它需要一个文件名。

也许你可以从oImage.Bitmap或oImage.Graphic得到实际的图像数据。使用MRI来查看可用的属性。

例如,它看起来像有可能的工作这样的getDIB()方法:

Form1.Image1.Picture = oImage.Bitmap.getDIB() 

还有一个想法:如果不使用的Office应用程序,您可以编写一个解压缩文件的代码和读取Pictures子目录中的每个图像。

+0

主席先生,感谢您付出的努力,我几乎一半的时间都在计算出来,现在我的问题是如何将电子表格中的图像导入到图片框中? –

+0

先生你是在哪里做的?你在Macro或VB6上做过这些吗? –

+0

这是我需要的先生,但它必须在VB6 –

相关问题