2016-07-06 31 views
1

現在、Excelファイル(* .xlsm)とApache POIで作業しています。 PDFが埋め込まれたExcelファイルをいくつか受け取っていますが、それらのファイルを抽出し、行と列に基づいて名前を変更したいのですが 埋め込まれたオブジェクトがイメージとして表され、 1つのセルよりも大きく、技術的にはセルの「In」ではありません。POIを含む埋め込みオブジェクトの行とColを取得

次のコードスニペットを使用すると、埋め込まれたPDFを抽出できますが、OleObject [1..2..3.etc ..]という名前が付けられています。

inStream = new FileInputStream(file); 
XSSFWorkbook workbook = new XSSFWorkbook(inStream); 
for (PackagePart pPart : workbook.getAllEmbedds()) { 
    String contentType = pPart.getContentType(); 
    if (contentType.equals("application/vnd.openxmlformats-officedocument.oleObject")){ 
     POIFSFileSystem fs = new POIFSFileSystem(pPart.getInputStream()); 
     TikaInputStream stream = TikaInputStream.get(fs.createDocumentInputStream("CONTENTS")); 

     byte[] bytes = IOUtil.toByteArray(stream); 
     stream.close(); 
     OutputStream outStream = new FileOutputStream(new File(ROOT_DIRECTORY.getAbsolutePath()+"\\PDF"+i+".pdf")); 
     IOUtil.copy(bytes, outStream); 
     outStream.close(); 
    }} 

私はorg.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheetは私がエクセルシートのXMLコードを見てみましょうし、多分taht EITH私は必要な情報を得ることができるかどうかを知りたいと思いました。このような。

<oleObjects><mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"><mc:Choice Requires="x14"><oleObject progId="Acrobat Document" dvAspect="DVASPECT_ICON" shapeId="1028" r:id="rId4"><objectPr defaultSize="0" r:id="rId5"><anchor moveWithCells="1"><from><xdr:col>8</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>11</xdr:row><xdr:rowOff>0</xdr:rowOff></from><to><xdr:col>8</xdr:col><xdr:colOff>1143000</xdr:colOff><xdr:row>13</xdr:row><xdr:rowOff>171450</xdr:rowOff></to></anchor></objectPr></oleObject></mc:Choice><mc:Fallback><oleObject progId="Acrobat Document" dvAspect="DVASPECT_ICON" shapeId="1028" r:id="rId4"/></mc:Fallback></mc:AlternateContent></oleObjects> 

-

<objectPr defaultSize="0" r:id="rId5"><anchor moveWithCells="1"><from><xdr:col>8</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>11</xdr:row><xdr:rowOff>0</xdr:rowOff></from><to><xdr:col>8</xdr:col><xdr:colOff>1143000</xdr:colOff><xdr:row>13</xdr:row><xdr:rowOff>171450</xdr:rowOff></to></anchor></objectPr> 

私はアンカーの情報を使用して、それを取得する方法を見つけることができないだけで可能ですが、イムだろうと思います。

この情報は、私が何をしようとしているのかを明確にしたいと考えています。

ありがとうございます。

答えて

0

私はあなたがここに見つけることができ、現在のPOI-OOXML-スキーマソースの瓶のソースコードを見てきました:http://repo1.maven.org/maven2/org/apache/poi/ooxml-schemas/1.3/

org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheetがorg.apacheを拡張.xmlbeans.XmlObjectは、継承された.toString()メソッドを使用してXMLを文字列として提供します。または、CTWorksheetオブジェクトのgetOleObjects()を呼び出すことで、ワークシート内のOLEオブジェクトのリストにすばやくアクセスできます。

/** 
* Gets the "oleObjects" element 
*/ 
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOleObjects getOleObjects(); 

CTOleObjects自体がorg.apache.xmlbeans.XmlObjectを拡張して、もう一度、あなたは、解析のためにtoString()を使用してXMLを取得し、またはorg.openxmlformats.schemas.spreadsheetml.x2006.main.CTOleObject OLEのリストを取得することができますCTOleObjects.getOleObjectList()を使用して反復のためのオブジェクト。

/** 
* Gets a List of "oleObject" elements 
*/ 
java.util.List<org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOleObject> getOleObjectList(); 

この情報を取得するために検索CTOleObjectは、あなたが列を決定できるようにするために、子XML要素を取得するためにgetterメソッドを持っていないようですので、私はあなたには、いくつかのXML解析を行う必要があると思う、または文字列文字列XML表現に含まれている場合

これが役に立ちます。

関連する問題