私は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)ファイルではありません。 "
ここでストリームオブジェクトから読み取ることに問題はありますか?助けてください。
「contentStream」とは何ですか?それはどこに定義されていますか?どのように値を割り当てていますか?コードから関連する部分を削除しないでください。 [mcve]を作成するのが最善です。 – RealSkeptic
contentStreamはオブジェクト(java.lang.Object)として定義されています。次に、InputStreamにcasting doneを入力します。 オブジェクト\t contentStream = IDataUtil.get(pipelineCursor、 "contentStream"); \t \t \t文字列\t webFlag = IDataUtil.getString(pipelineCursor、 "webFlag"); 実際には、このコードはwebMethodsというツールを使用して行われます。 –
私は、ストリームは、POST呼び出し中に破損していると思う。私はsample.xlsx形式でデータを書き込もうとしていますが、ファイルを開くときに無効な形式と表示されます。私の質問は、ブラウザからサーバーに正確なコンテンツを渡す方法です。 –