1 /
55
56 package org.apache.poi.hssf.dev;
57
58 import java.io.FileInputStream;
59 import java.io.FileOutputStream;
60 import java.io.InputStream;
61 import java.io.IOException;
62
63 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
64 import org.apache.poi.hssf.record.*;
65 import org.apache.poi.hssf.eventmodel.*;
66 import org.apache.poi.hssf.eventusermodel.*;
67 import org.apache.poi.hssf.usermodel.*;
68
69
73
74 public class EFHSSF
75 {
76 String infile;
77 String outfile;
78 HSSFWorkbook workbook = null;
79 HSSFSheet cursheet = null;
80
81
82
83 public EFHSSF()
84 {
85 }
86
87 public void setInputFile(String infile)
88 {
89 this.infile = infile;
90 }
91
92 public void setOutputFile(String outfile)
93 {
94 this.outfile = outfile;
95 }
96
97 public void run()
98 throws IOException
99 {
100 FileInputStream fin = new FileInputStream(infile);
101 POIFSFileSystem poifs = new POIFSFileSystem(fin);
102 InputStream din = poifs.createDocumentInputStream("Workbook");
103 HSSFRequest req = new HSSFRequest();
104
105 req.addListenerForAllRecords(new EFHSSFListener(this));
106 HSSFEventFactory factory = new HSSFEventFactory();
107
108 factory.processEvents(req, din);
109 fin.close();
110 din.close();
111 FileOutputStream fout = new FileOutputStream(outfile);
112
113 workbook.write(fout);
114 fout.close();
115 System.out.println("done.");
116 }
117
118 public void recordHandler(Record record)
119 {
120 HSSFRow row = null;
121 HSSFCell cell = null;
122 int sheetnum = -1;
123
124 switch (record.getSid())
125 {
126
127 case BOFRecord.sid :
128 BOFRecord bof = ( BOFRecord ) record;
129
130 if (bof.getType() == bof.TYPE_WORKBOOK)
131 {
132 workbook = new HSSFWorkbook();
133 }
134 else if (bof.getType() == bof.TYPE_WORKSHEET)
135 {
136 sheetnum++;
137 cursheet = workbook.getSheetAt(sheetnum);
138 }
139 break;
140
141 case BoundSheetRecord.sid :
142 BoundSheetRecord bsr = ( BoundSheetRecord ) record;
143
144 workbook.createSheet(bsr.getSheetname());
145 break;
146
147 case RowRecord.sid :
148 RowRecord rowrec = ( RowRecord ) record;
149
150 cursheet.createRow(rowrec.getRowNumber());
151 break;
152
153 case NumberRecord.sid :
154 NumberRecord numrec = ( NumberRecord ) record;
155
156 row = cursheet.getRow(numrec.getRow());
157 cell = row.createCell(numrec.getColumn(),
158 HSSFCell.CELL_TYPE_NUMERIC);
159 cell.setCellValue(numrec.getValue());
160 break;
161
162 case SSTRecord.sid :
163 SSTRecord sstrec = ( SSTRecord ) record;
164
165 for (int k = 0; k < sstrec.getNumUniqueStrings(); k++)
166 {
167 workbook.addSSTString(sstrec.getString(k));
168 }
169 break;
170
171 case LabelSSTRecord.sid :
172 LabelSSTRecord lrec = ( LabelSSTRecord ) record;
173
174 row = cursheet.getRow(lrec.getRow());
175 cell = row.createCell(lrec.getColumn(),
176 HSSFCell.CELL_TYPE_STRING);
177 cell.setCellValue(workbook.getSSTString(lrec.getSSTIndex()));
178 break;
179 }
180 }
181
182 public static void main(String [] args)
183 {
184 if ((args.length < 2) || !args[ 0 ].equals("--help"))
185 {
186 try
187 {
188 EFHSSF viewer = new EFHSSF();
189
190 viewer.setInputFile(args[ 0 ]);
191 viewer.setOutputFile(args[ 1 ]);
192 viewer.run();
193 }
194 catch (IOException e)
195 {
196 e.printStackTrace();
197 }
198 }
199 else
200 {
201 System.out.println("EFHSSF");
202 System.out.println(
203 "General testbed for HSSFEventFactory based testing and "
204 + "Code examples");
205 System.out.println("Usage: java org.apache.poi.hssf.dev.EFHSSF "
206 + "file1 file2");
207 System.out.println(
208 " --will rewrite the file reading with the event api");
209 System.out.println("and writing with the standard API");
210 }
211 }
212 }
213
214 class EFHSSFListener
215 implements HSSFListener
216 {
217 EFHSSF efhssf;
218
219 public EFHSSFListener(EFHSSF efhssf)
220 {
221 this.efhssf = efhssf;
222 }
223
224 public void processRecord(Record record)
225 {
226 efhssf.recordHandler(record);
227 }
228 }
229