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