PageRenderTime 119ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/JavaShellScript/jsslib/src/jsslib/excel/ExcelReader.java

http://javashellscript.googlecode.com/
Java | 189 lines | 107 code | 23 blank | 59 comment | 18 complexity | 339a5478640635ca58c7d984f07ad047 MD5 | raw file
  1. package jsslib.excel;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.text.Format;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Locale;
  8. import org.apache.poi.hssf.usermodel.HSSFCell;
  9. import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
  10. import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
  11. import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.CellValue;
  12. import org.apache.poi.hssf.usermodel.HSSFRow;
  13. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  14. /**
  15. *
  16. * @author robert schuster
  17. */
  18. public class ExcelReader {
  19. /**
  20. * Zellen könnten Formeln enthalten, die ausgewertet werden müssen
  21. */
  22. private HSSFFormulaEvaluator evaluator;
  23. /**
  24. * Workbook-Objekt für den zugriff auf den Datei-Inhalt
  25. */
  26. private HSSFWorkbook wb;
  27. private int FehlerStatus = 0;
  28. /**
  29. * Erzeugt ein Reader-Objekt mit der Übergebenen Excel-Datei
  30. * @param datei
  31. */
  32. public ExcelReader(String datei) {
  33. //Prüfen ob es sich um eine Excel 2007 Datei handelt.
  34. if (datei.contains(".xlsx")) {
  35. System.out.println("Excel 2007/2008 Dateien sind noch nicht unterstützt!");
  36. FehlerStatus = 1;
  37. return;
  38. }
  39. //Kann die Datei zum lesen geöffnet werden?
  40. File quelle = new File(datei);
  41. if (!quelle.canRead()) {
  42. System.out.println(quelle.getName() + " kann nicht geöffnet werden!\n");
  43. FehlerStatus = 2;
  44. return;
  45. }
  46. //Excel-Datei komplett einlesen
  47. //neues Workbook erstellen
  48. wb = null;
  49. try {
  50. InputStream inp = new FileInputStream(quelle);
  51. wb = new HSSFWorkbook(inp);
  52. inp.close();
  53. } catch (Exception e) {
  54. System.out.println(quelle.getName() + " kann nicht eingelesen werden. Handelt es sich um eine Excel-Datei?\n");
  55. FehlerStatus = 3;
  56. return;
  57. }
  58. //Falls Formeln ausgewertet werden müssen
  59. evaluator = new HSSFFormulaEvaluator(wb);
  60. }
  61. /**
  62. * Gibt den FehlerStatus zurück
  63. * @return 1 = .xlsx datei
  64. * 2 = datei nicht lesbar
  65. * 3 = kein korrektes Excel-Format
  66. */
  67. public int getFehlerStatus() {
  68. return FehlerStatus;
  69. }
  70. /**
  71. * Gibt die Anzahl der Tabellen zurück
  72. * @return
  73. */
  74. public int getNumberOfSheets() {
  75. return wb.getNumberOfSheets();
  76. }
  77. /**
  78. * Gibt den Namen der Tabelle an der Stelle index zurück
  79. * @param index 0 = erste Tabelle
  80. * @return
  81. */
  82. public String getSheetName(int index) {
  83. return wb.getSheetName(index);
  84. }
  85. /**
  86. * Gibt die Anzahl der Zeilen in einer Tabelle zurück
  87. * Achtung! Es können auch zeilen dabei sein, die null sind
  88. * @param tabelle
  89. * @return
  90. */
  91. public int getRowCount(int tabelle) {
  92. return wb.getSheetAt(tabelle).getLastRowNum()+1;
  93. }
  94. /**
  95. * Gibt eine Zeile der Tabelle als String zurück
  96. * @param tabelle Der Index der Tabelle
  97. * @param zeile Der Index der Zeile
  98. * @param format Zahl = feste Breite, Zeichen = Trennzeichen
  99. * @return "" wenn die Zeile leer ist, Sonst den inhalt der Zeile
  100. */
  101. public String getRow(int tabelle, int zeile, Object format) {
  102. String ergebnis = "";
  103. HSSFRow row = wb.getSheetAt(tabelle).getRow(zeile);
  104. //Wird gebraucht um festzustellen, pb es sich um ein Datum handeln könnte
  105. HSSFDataFormatter formater = new HSSFDataFormatter();
  106. //format-anweisungen umsetzen
  107. String formatvorn = "";
  108. String formathinten = "";
  109. //Formatierung festlegen
  110. if (format instanceof Integer) {
  111. //Feste breite
  112. formatvorn = "%" + format;
  113. } else if (format instanceof String) {
  114. //Trennzeichen
  115. formatvorn = "%";
  116. formathinten = format.toString();
  117. } else {
  118. return "FEHLER: Der Parameter format ist ungültig! Es muss eine Zahl oder ein String sein!";
  119. }
  120. if (row != null) {
  121. for (int x=0;x<=row.getLastCellNum();x++) {
  122. HSSFCell zelle = row.getCell(x);
  123. String text = "";
  124. if (zelle != null) {
  125. CellValue wert = evaluator.evaluate(zelle);
  126. if (wert != null) {
  127. switch (wert.getCellType()) {
  128. case HSSFCell.CELL_TYPE_BLANK:
  129. text = String.format(formatvorn + "s" + formathinten, "");
  130. break;
  131. case HSSFCell.CELL_TYPE_BOOLEAN:
  132. text = String.format(formatvorn + "b" + formathinten, wert.getBooleanValue());
  133. break;
  134. case HSSFCell.CELL_TYPE_ERROR:
  135. text = String.format(formatvorn + "s" + formathinten, "ERROR");
  136. break;
  137. case HSSFCell.CELL_TYPE_NUMERIC:
  138. //prüfen, ob es sich um ein Spezielles Format handelt
  139. Format dataformat = formater.createFormat(zelle);
  140. if (dataformat != null) {
  141. //datum selbst formatieren
  142. //if (dataformat instanceof SimpleDateFormat) {
  143. // text = String.format(formatvorn + "tF" + formathinten, zelle.getDateCellValue());
  144. //} else {
  145. text = String.format(formatvorn + "s" + formathinten, formater.formatCellValue(zelle,evaluator));
  146. //}
  147. } else
  148. //kein besonderes Format
  149. text = String.format(Locale.ENGLISH, formatvorn + "f" + formathinten, wert.getNumberValue());
  150. break;
  151. case HSSFCell.CELL_TYPE_STRING:
  152. text = String.format(formatvorn + "s" + formathinten, wert.getStringValue());
  153. break;
  154. }
  155. } else {
  156. text = String.format(formatvorn + "s" + formathinten, "NULL");
  157. }
  158. } else {
  159. text = String.format(formatvorn + "s" + formathinten, "");
  160. }
  161. ergebnis += text;
  162. }
  163. }
  164. return ergebnis;
  165. }
  166. }