POI Excel 파일 읽기
6401 단어 Excel
Eventusermodel은 사실 XML의 파일 형식을 사용하여 Excel을 읽습니다. 왜냐하면 Excel 내부 조직도 XML을 통해 이루어졌기 때문입니다. (접두사 이름을.zip으로 바꿀 수 있습니다.)
xl\worksheets\sheet1.xml - 첫 번째 sheet 내용
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><dimension ref="A1:D1"/>
<sheetViews><sheetView workbookViewId="0"><selection sqref="A1:XFD1"/></sheetView></sheetViews>
<sheetFormatPr defaultRowHeight="13.5" x14ac:dyDescent="0.15"/>
<sheetData>
<row r="1" spans="1:4" x14ac:dyDescent="0.15">
<c r="A1" t="s"><v>0</v></c>
<c r="B1" t="s"><v>1</v></c>
<c r="C1" t="s"><v>2</v></c>
<c r="D1" t="s"><v>15</v></c>
</row>
</sheetData>
<phoneticPr fontId="1" type="noConversion"/><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/><pageSetup paperSize="0" orientation="portrait" horizontalDpi="0" verticalDpi="0" copies="0"/></worksheet>
xl\sharedStrings.xml - Excel 파일의 문자열 값(예: 내용 세션)
<si>
<t>col1</t><phoneticPr fontId="1" type="noConversion"/>
</si>
<si>
<t>col2</t><phoneticPr fontId="1" type="noConversion"/>
</si>
POI의 이벤트 모델도 이러한 원리를 통해 Excel 파일을 읽는다.
먼저 Excel 파일을 읽고 XSSFReader 인스턴스를 가져옵니다.
XSSFReader reader = new XSSFReader(OPCPackage.open(file));
XMLReader xmlReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
// sharedStrings.xml
SharedStringsTable table = reader.getSharedStringsTable();
xmlReader.setContentHandler(new ContentHandler()// );
InputStream sheet = reader.getSheet("rId"+sheetId);
InputSourcesheetSource = new InputSource(sheet )
xmlReader.parse(sheetSource);
package net.bingosoft.import4excel.common;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TestContentHandler extends DefaultHandler{
private SharedStringsTable table;
private boolean isString;
private String value;
private FileWriter writer;
public TestContentHandler(SharedStringsTable table){
this.table = table;
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
value = new String(ch,start,length);
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endDocument()
*/
@Override
public void endDocument() throws SAXException {
try {
writer.flush();
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
try {
if(qName.equals("v")){
if(isString) value = table.getEntryAt(Integer.valueOf(value.trim())).getT();
writer.write(value+",");
}
if(qName.equals("row")){
writer.write("\r
");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startDocument()
*/
@Override
public void startDocument() throws SAXException {
try {
File file = new File("D:/test.txt");
if(file.exists()) file.delete();
writer = new FileWriter(file);
} catch (IOException e) {
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(qName.equals("c")){
String type = attributes.getValue("t");
if(StringUtils.isNotBlank(type) && type.equals("s")){
isString = true;
}else{
isString = false;
}
}
value = "";
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel Grep toolExcel Grep tool ■히나가타 ■ 시트 구성 ExcelGrep.cls...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.