2017-05-29 5 views
0

私はhtmlフォームからファイルをアップロードし、Apache POI jarを使ってファイルを解析しようとしています。下記のHTMLコードをご覧ください。Issue with Apache POI Jar

<HTML> 
<HEAD> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
</HEAD> 

<BODY bgcolor="#E7EBEF"> 
    <CENTER><H1>Welcome To The Excel File Upload Page .</H1></CENTER> 

    <form name="connectForm" id="connectForm" method="POST" action="/invoke/excelUtility.flowServices.dsp:readExcelWrapper" enctype="multipart/form-data"> 
     <table> 
       <tr> 
       <td><b><font color="red">Select Input File (.xlsx)</font></b></td> 
       <td><input type="file" name="fileData" id="fileData" 
         accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /></td> 
       </tr> 
       <tr> 
       <td><b><font color="red">Sheet Name</font></b></td> 
       <td><input type="text" name="sheetName" id="sheetName" value="EIP_UPLOAD"></input></td> 
       </tr> 
       <tr> 
       <td><b><font color="red">Has Multiple Sheets</font></b></td> 
       <td><input type="text" name="hasMultipleSheets" id="hasMultipleSheets" value="false"></input></td> 
       </tr> 
       <tr> 
       <td><b><font color="red">Has Column Header</font></b></td><td><input type="text" name="hasColumnHeader" id="hasColumnHeader" value="true"></input></td> 
       </tr> 
       <tr> 
       <td><b><font color="red">Web Flag</font></b></td><td><input type="text" name="webFlag" id="webFlag" value="true"></input></td> 
       </tr> 
       <tr> 
       <td></td> 
       </tr> 
       <tr> 
       <td></td> 
       </tr> 
       <tr> 
       <td><input type="image" src="images/submit-button.png" width="95" height="20"/></td> 
       </tr> 
     </table> 
     <br/> 
     <br/> 
    </form> 

</BODY> 
</HTML> 

ファイルの内容がHttpInputStreamとしてサーバーに送信されています。私はそれを使ってワークブックを作成しています。 、以下のコードを見つけてください

IDataCursor pipelineCursor = pipeline.getCursor(); 
    String filePath = IDataUtil.getString(pipelineCursor, "filePath"); 
    String hasColumnHeader = IDataUtil.getString(pipelineCursor, "hasColumnHeader"); 
    String sheetName = IDataUtil.getString(pipelineCursor, "sheetName"); 
    String hasMultipleSheets = IDataUtil.getString(pipelineCursor, "hasMultipleSheets"); 
    Object contentStream = IDataUtil.get(pipelineCursor, "contentStream"); 
    String webFlag = IDataUtil.getString(pipelineCursor, "webFlag"); 
    pipelineCursor.destroy(); 
    int rowCnt=0; 
    String[] columnNameList ={""}; 
    StringBuilder clnm=new StringBuilder(""); 

    String status=""; 

    XSSFWorkbook workbook=null; 
    FileInputStream file=null; 

    try { 
      if(contentStream!=null) 
      { 
       InputStream is=(InputStream)contentStream; 
       workbook=new XSSFWorkbook(is); 
      } 
      else 
      { 
       file = new FileInputStream(new File(filePath)); 
       workbook = new XSSFWorkbook(file); 
      } 
      XSSFSheet sheet=null; 

      //Get first/desired sheet from the workbook 

       sheet = workbook.getSheetAt(0); 

      //Iterate through each rows one by one 
      Iterator<Row> rowIterator = sheet.iterator(); 

      while (rowIterator.hasNext()) 
      { 
       Row row = rowIterator.next(); 

       //For each row, iterate through all the columns 
       Iterator<Cell> cellIterator = row.cellIterator(); 
       int cellCnt=0; 
       while (cellIterator.hasNext()) 
       { 

        Cell cell = cellIterator.next(); 
        if(rowCnt==0) 
        { 
         clnm.append(cell.getStringCellValue()); 
         clnm.append("\n");  
        } 
        cellCnt++; 
       } 
       rowCnt++; 
      } 

      columnNameList=clnm.toString().split("\n"); 

      if(hasColumnHeader.equals("true")) 
        rowCnt=rowCnt-1; 
     } 
     catch(Exception e) 
     { 
      status=e.toString(); 
     } 

PS:あなたは、以下のリンクからIDataUtil/IDataCursorのAPIを表示することができ、私は、スタンドアローンな方法でファイルを実行しているさて場合http://grandyop94.free.fr/wMe/7.1.2/7-1-1_Integration_Server_Java_API_Reference/index.html?com/wm/data/IDataUtil.html

、それはファイルからです、それは絶対にうまく動作しています。問題ありません。しかし、ファイル入力タグhtmlを使用してブラウザから実行しようとすると、以下のエラーが発生します。

"org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException:有効なエントリや内容が見つかりませんでした。有効なOOXML(Office Open XML)ファイルではありません。 "

ここでストリームオブジェクトから読み取ることに問題はありますか?助けてください。

+0

「contentStream」とは何ですか?それはどこに定義されていますか?どのように値を割り当てていますか?コードから関連する部分を削除しないでください。 [mcve]を作成するのが最善です。 – RealSkeptic

+0

contentStreamはオブジェクト(java.lang.Object)として定義されています。次に、InputStreamにcasting doneを入力します。 オブジェクト\t contentStream = IDataUtil.get(pipelineCursor、 "contentStream"); \t \t \t文字列\t webFlag = IDataUtil.getString(pipelineCursor、 "webFlag"); 実際には、このコードはwebMethodsというツールを使用して行われます。 –

+0

私は、ストリームは、POST呼び出し中に破損していると思う。私はsample.xlsx形式でデータを書き込もうとしていますが、ファイルを開くときに無効な形式と表示されます。私の質問は、ブラウザからサーバーに正確なコンテンツを渡す方法です。 –

答えて

0

.xlsxファイルではなく、.xlsxファイルをアップロードしてください。

+0

こんにちは、.xlsxファイルのみをアップロードしています。私はそれがフォームからのストリーム入力と関係していると思います。それは正しく識別することができません。転送中にストリームが壊れているようです。 –