1 回答

TA貢獻1783條經(jīng)驗 獲得超4個贊
請不要堅持使用過時的軟件版本。這樣做不是我們在軟件開發(fā)方面取得進步的方式。
但當(dāng)然,XSSF and SAX (Event API)版本也存在3.15。
但在這個舊版本中SharedStringsTable已經(jīng)沒有辦法了getItemAt。它只有g(shù)etEntryAtwhich 返回 a org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst。所以類中的代碼SAXExcelSheetHandler必須更改為:
...
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
...
...
? ? public void endElement(String uri, String localName, String name)
? ? ? ? ? ? throws SAXException {
? ? ? ? // Process the last contents as required.
? ? ? ? // Do now, as characters() may be called more than once
? ? ? ? if(nextIsString) {
? ? ? ? ? ? int idx = Integer.parseInt(lastContents);
? ? ? ? ? ? //lastContents = sst.getItemAt(idx).getString();
? ? ? ? ? ? lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString();
? ? ? ? ? ? nextIsString = false;
? ? ? ? }
? ? ? ? // v => contents of a cell
? ? ? ? // Output after we've seen the string contents
? ? ? ? if(name.equals("v")) {
? ? ? ? ? ? System.out.println(lastContents);
? ? ? ? }
? ? }
...
也還沒有一個SAXHelper. 所以類的代碼POISaxXaafV2必須像這樣改變:
...
import java.io.File;
import java.io.InputStream;
import java.util.Iterator;
//import org.apache.poi.ooxml.util.SAXHelper;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
...
...
? ? ? ? OPCPackage opcPackage = OPCPackage.open(file);
? ? ? ? XSSFReader xssfReader = new XSSFReader(opcPackage);
? ? ? ? SharedStringsTable sharedStringsTable = xssfReader.getSharedStringsTable();
? ? ? ? //XMLReader xmlParser = SAXHelper.newXMLReader();
? ? ? ? SAXParserFactory parserFactory = SAXParserFactory.newInstance();
? ? ? ? SAXParser parser = parserFactory.newSAXParser();
? ? ? ? XMLReader xmlParser = parser.getXMLReader();
? ? ? ? ContentHandler contentHandler = new SAXExcelSheetHandler(sharedStringsTable);
? ? ? ? xmlParser.setContentHandler(contentHandler);
...
添加回答
舉報