2016-12-02 1 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 

불행하게도이 코드는 늘 그가 Excel이 설치되어 그러나 그는 오픈 오피스 스프레드 시트를 가지고 있지 않습니다 becuase 내 친구 PC에서 작동합니다. Openoffice에서 Excel을 열려고 시도한 다음 파일이 열리겠습니다. 이제 OpenOffice에서 위 코드를 어떻게 변환 할 수 있습니까? OpenOffice 파일의 코드를 실행하는 것입니다.

이 내 코드하지만 미래에 도움

이 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 

    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 작동하지 않습니다 여기

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 for help. –

답변

0

나는 그것을 시도한 적이 없지만 according to the docs 당신은 COM 자동화를 통해 오픈 오피스를 제어 할 수 있습니다.

위의 VB6 코드는 COM 자동화를 통해 Excel을 제어합니다. 컴퓨터에 Open Office를 설치하고 VB6에서 Calc를 자동화하여 스프레드 시트를 열고 이미지를 추출 할 수 있는지 확인하십시오. 나는 그것이 그것을 허용하는지 모른다. Excel COM 자동화는 매우 강력하며 거의 모든 작업을 수행 할 수 있습니다. Open Office는 강력하지 않을 수 있습니다 (잘 모르겠습니다).

나는 당신이 해결하려고하는 문제점과 완전히 다른 접근법이 있는지를 신중히 생각해 보라고 조언합니다!

+0

실제로 두 명의 사용자가 Excel에서 형식을 만드는 Excel을 사용하고 사용자 2에게 보냅니다. 2는 openoffice 만 가지고 있지만 좋은 점은 오픈 오피스에서 Excel을 열 수 있지만 사용자 2가 Excel을 사용하지만 위의 코드를 사용하지 않으면 위 코드를 가져올 수 있도록 위의 코드를 어떻게 변환 할 수 있습니까? 엑셀 응용 프로그램을 설치하지 않고 엑셀 –

+0

엑셀이 설치되어 있지 않으면 "엑셀 가져 오기"를 할 수 없습니다. 내 대답은 "오픈 오피스 가져 오기"가 가능할 수도 있습니다. [링크] (https : //www.openoffice .org/udk/common/man/tutorial/office_automation.html) 엑셀 파일을 사용하지 않고 사용자 1에서 사용자 2로 그림 또는 "형식"을 전송하십시오. 사용자 2에게 Excel이 없으면 사용하는 것이 더 좋을 수도 있습니다 다른 형식. – MarkJ

+0

선생님, 노력에 감사드립니다. 그리고 메신저 거의 반쯤 알아 내면 내 문제는 스프레드 시트에서 그림 상자로 이미지를 가져 오는 방법입니다. –

1

나는 일반적으로 Microsoft Office를 사용하지 않기 때문에 코드가 무엇을하는지 정확히 알지 못합니다. 그러나이 작업은 OpenOffice Basic을 사용하여 수행 할 수 있습니다. OpenOffice Basic을 배울 수있는 가장 좋은 장소 중 하나는 Andrew Pitonyak's Macro Document입니다.

시작하려면 5.9.5. Convert all linked images 섹션을 참조하십시오.

편집 :

캘크에서이 작업을 수행하려면, 먼저 나는 Tools -> Macros -> Organize Dialogs에 가서 "MyImageControl"라는 이름의 이미지 컨트롤과 함께 "ImageViewerForm"라는 대화 상자를 만들었습니다.

은 그 때 나는 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를 사용하십시오.

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

한 번 더 생각 :이 같은 일 수도 getDIB() 메소드가 같은 예를 들어

, 그것은 보이는 대신 Office 응용 프로그램을 사용하여, 당신은 파일 압축을 풀고 코드를 작성하고 수 그림 하위 디렉토리의 각 이미지를 읽습니다.

+0

선생님, 노력과 메신저에 대해 반쯤은 알아 냈습니다. 내 문제는 스프레드 시트에서 이미지를 이미지 상자로 가져 오는 방법입니다. –

+0

선생님 어디서이 일을하셨습니까? 매크로 또는 VB6에서이 작업을 수행 했습니까? –

+0

이것은 내가 선생님이 필요하지만 VB6에서 수행되어야한다. –

관련 문제