2016-12-02 6 views
1

У меня есть код, который экспортирует изображение из Excel в изображение и вот оно.Как использовать таблицу OpenOffice для получения изображения из файла 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 becuase он не установлен Excel, но он имеет OpenOffice таблицу. Я попытался открыть Excel в Openoffice, тогда файл открывается, теперь моя цель - как я могу преобразовать код выше в 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 вы можете управлять Open Office через автоматизацию COM.

Ваш код VB6 выше управляет Excel через автоматизацию COM. Вы можете установить Open Office на свой компьютер и посмотреть, можете ли вы автоматизировать Calc из VB6, чтобы открыть электронную таблицу и извлечь изображение. Я не знаю, позволяет ли это. Автоматизация Excel COM очень эффективна и позволяет делать практически все, Open Office может быть не столь мощным (я не знаю).

Я бы посоветовал тщательно подумать о том, какую проблему вы пытаетесь решить, и есть ли другой подход полностью!

+0

На самом деле там 2 пользователя системы, в которых первый использует excel, они создают формат в excel и отправляют его пользователю 2, но пользователь 2 имеет только openoffice, хорошо, что excel может быть открыт в открытом офисе, но мой код выше будет работать, если пользователь 2 будет иметь преимущество, но они не используют его. Моя цель заключается в том, как я могу преобразовать код выше, чтобы он мог импортировать excel без установки excel app –

+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.

EDIT:

Для этого в 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

Кнопка «Следующее изображение» должно быть достаточно просто реализовать путем добавления обработчика событий.

Для документации см. GraphicObjectShape и UnoControlButtonModel. Но в основном я просто использовал MRI tool, чтобы понять это.

EDIT 2:

Относительно ошибки вы публикуемая, то GraphicURL свойства в данном случае является строкой, которая ссылается на в памяти объекте, а не Filepath. Пример строки показан здесь: https://www.openoffice.org/api/docs/common/ref/com/sun/star/graphic/XGraphicObject.html.

Поэтому он не подходит для перехода на LoadPicture, который принимает имя файла.

Возможно, вы сможете получить фактические данные изображения от oImage.Bitmap или oImage.Graphic. Используйте МРТ, чтобы узнать, какие атрибуты доступны.

Например, это выглядит как есть метод getDIB(), который мог бы работать так:

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

Еще одна идея: Вместо того, чтобы использовать приложение Office, вы можете написать код, который распаковывает файл и читает каждое изображение в подкаталоге Pictures.

+0

Сэр благодарит за усилия и им почти половину от него, выясняя это, теперь проблема заключается в том, как получить изображение из электронной таблицы в картинный ящик? –

+0

Сэр, где вы это делали? Вы делали это на Macro или VB6? –

+0

Это то, что мне было нужно, сэр, но это должно быть сделано в VB6 –