1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package ubic.basecode.io.excel;
20
21 import org.apache.poi.hssf.usermodel.*;
22 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
23 import org.apache.poi.ss.usermodel.CellType;
24
25 import java.io.FileInputStream;
26 import java.io.IOException;
27 import java.util.HashSet;
28 import java.util.LinkedList;
29 import java.util.List;
30 import java.util.Set;
31
32
33
34
35
36
37
38 public class ExcelUtil {
39
40
41
42
43
44
45
46 @SuppressWarnings("resource")
47 public static HSSFSheet getSheetFromFile( String filename, String sheetName ) throws IOException {
48 POIFSFileSystem fs = new POIFSFileSystem( new FileInputStream( filename ) );
49 HSSFWorkbook wb = new HSSFWorkbook( fs );
50 return wb.getSheet( sheetName );
51 }
52
53
54
55
56
57
58
59 public static String getValue( HSSFSheet sheet, int row, int col ) {
60 if ( col > 255 ) {
61 throw new RuntimeException( "Column position is over 255" );
62 }
63 if ( sheet.getRow( row ) == null ) return null;
64 HSSFCell cell = sheet.getRow( row ).getCell( col );
65 if ( cell == null ) {
66 return null;
67 }
68
69 if ( cell.getCellType() == CellType.STRING ) return cell.getRichStringCellValue().getString();
70
71 if ( cell.getCellType() == CellType.NUMERIC ) {
72
73 return Double.toString( cell.getNumericCellValue() );
74 }
75 if ( cell.getCellType() == CellType.FORMULA ) return cell.getCellFormula();
76
77 return "";
78 }
79
80
81
82
83
84
85
86
87 public static Set<String> grabColumnValues( HSSFSheet sheet, int column, boolean header, boolean clean ) {
88 return new HashSet<String>( grabColumnValuesList( sheet, column, header, clean ) );
89 }
90
91
92
93
94
95
96
97
98
99
100 public static Set<String> grabColumnValues( HSSFSheet sheet, int column, boolean header, boolean clean,
101 SpreadSheetFilter f ) {
102 return new HashSet<String>( grabColumnValuesList( sheet, column, header, clean, f ) );
103 }
104
105
106
107
108
109
110
111
112 public static List<String> grabColumnValuesList( HSSFSheet sheet, int column, boolean header, boolean clean ) {
113 return grabColumnValuesList( sheet, column, header, clean, new SpreadSheetFilter() {
114 @Override
115 public boolean accept( HSSFSheet s, int row ) {
116 return true;
117 }
118 } );
119 }
120
121
122
123
124
125
126
127
128
129 public static List<String> grabColumnValuesList( HSSFSheet sheet, int column, boolean header, boolean clean,
130 SpreadSheetFilter f ) {
131 List<String> result = new LinkedList<String>();
132
133 int rows = sheet.getLastRowNum() + 1;
134 for ( int i = 0; i < rows; i++ ) {
135 if ( header && i == 0 ) continue;
136 String term = ExcelUtil.getValue( sheet, i, column );
137 if ( term == null ) continue;
138
139 if ( f.accept( sheet, i ) ) {
140 term = term.trim();
141 if ( clean ) term = term.toLowerCase();
142 result.add( term );
143 }
144 }
145 return result;
146 }
147
148 public static void main( String args[] ) {
149 HSSFWorkbook workbook = new HSSFWorkbook();
150 HSSFSheet spreadsheet = workbook.createSheet();
151 ExcelUtil.setFormula( spreadsheet, 1, 1, "HYPERLINK(\"x\",\"x\")" );
152
153 }
154
155
156
157
158
159
160
161 public static void setFormula( HSSFSheet sheet, int row, int col, String value ) {
162 HSSFRow r = sheet.getRow( row );
163 if ( r == null ) {
164 r = sheet.createRow( row );
165 }
166 HSSFCell c = r.createCell( col );
167 c.setCellFormula( value );
168 }
169
170
171
172
173
174
175
176 public static void setValue( HSSFSheet sheet, int row, int col, double value ) {
177 HSSFRow r = sheet.getRow( row );
178 if ( r == null ) {
179 r = sheet.createRow( row );
180 }
181 HSSFCell c = r.createCell( col );
182 c.setCellType( CellType.NUMERIC );
183 c.setCellValue( value );
184
185 }
186
187
188
189
190
191
192
193 public static void setValue( HSSFSheet sheet, int row, int col, int value ) {
194 setValue( sheet, row, col, ( double ) value );
195 }
196
197
198
199
200
201
202
203 public static void setValue( HSSFSheet sheet, int row, int col, String value ) {
204 HSSFRow r = sheet.getRow( row );
205 if ( r == null ) {
206 r = sheet.createRow( row );
207 }
208 HSSFCell c = r.createCell( col );
209 c.setCellType( CellType.STRING );
210 c.setCellValue( new HSSFRichTextString( value ) );
211 }
212 }