
Excel (XLS) Dateien mit ColdFusion 8 einlesen
Dauernd muss für irgendwelche Projekte dieses Excel-Format eingelesen werden... Bislang hab ich mir mit dem guten alten cfx_excel2query geholfen... Das versagt mir aber unter ColdFusion 8 seinen Dienst...
Also hilft man sich selbst mit dieser wundervollen UserDefinedFunction (UDF) um aus einem Excel-Sheet ein Query zu machen:
1 <cfscript>
2 function readXLS(filename,sheetnum) {
3 // Admin-API f�r debug zwecke: adminapi.dump(varname);
4 var adminapi = createObject("component","cfide.adminapi.base");
5 // Source File
6 var infile = createObject('java','java.io.FileInputStream').init(filename);
7 // Apache POI paket zum lesen von Excel-Dateien
8 var fs = createObject('java','org.apache.poi.poifs.filesystem.POIFSFileSystem').init(infile);
9 // Excel-Workbook
10 var wb = createObject('java','org.apache.poi.hssf.usermodel.HSSFWorkbook').init(fs);
11 // Arbeitsblatt
12 var sheet = wb.getSheetAt(0);
13 // Anzahl Rows
14 var noRows = sheet.getLastRowNum();
15 // Erste Row (Columnnames)
16 var row = sheet.getRow(0);
17 // Anzahl Columns
18 var noCols = row.getLastCellNum();
19 // sonstiges Variablen
20 var i = 0;
21 var j = 0;
22 var cell = "";
23 var value = "";
24 var columnnames = "";
25 var q = "";
26
27 // Spaltennamen holen
28 for (j = 0;j LT noCols;j = j + 1) {
29 try {
30 cell=row.getCell(JavaCast('short','#j#'));
31 // je nach Typ Daten numerisch oder als string holen
32 if (cell.getCellType() is 1) {
33 columnnames = listappend(columnnames,cell.getStringCellValue());
34 }
35 else if (cell.getCellType() is 0) {
36 columnnames = listappend(columnnames,cell.getNumericCellValue());
37 }
38 } catch (Any expt) {
39 // nothing happens
40 }
41 }
42 columnnames = replace(columnnames," ","","all");
43 // Query erstellen
44 q = querynew(columnnames);
45 // Daten holen ab Row 2
46 for (i = 1;i LTE noRows;i = i + 1) {
47 row=sheet.getRow(JavaCast('int','#i#'));
48 // Row hinzuf�gen
49 queryAddRow(q);
50 for (j = 0;j LT noCols;j = j + 1) {
51 try {
52 cell=row.getCell(JavaCast('short','#j#'));
53 if (cell.getCellType() is 1) {
54 value=cell.getStringCellValue();
55 }
56 else if (cell.getCellType() is 0) {
57 value=cell.getNumericCellValue();
58 }
59 } catch (Any expt) {
60 value="ups";
61 }
62 // Wert in Query schreiben
63 QuerySetCell(q,listGetAt(columnnames,j + 1),value);
64 }
65 }
66 // Datei schlie�en
67 infile.close();
68 // Ergebnis zur�ckgeben
69 return q;
70 }
71 </cfscript>
2 function readXLS(filename,sheetnum) {
3 // Admin-API f�r debug zwecke: adminapi.dump(varname);
4 var adminapi = createObject("component","cfide.adminapi.base");
5 // Source File
6 var infile = createObject('java','java.io.FileInputStream').init(filename);
7 // Apache POI paket zum lesen von Excel-Dateien
8 var fs = createObject('java','org.apache.poi.poifs.filesystem.POIFSFileSystem').init(infile);
9 // Excel-Workbook
10 var wb = createObject('java','org.apache.poi.hssf.usermodel.HSSFWorkbook').init(fs);
11 // Arbeitsblatt
12 var sheet = wb.getSheetAt(0);
13 // Anzahl Rows
14 var noRows = sheet.getLastRowNum();
15 // Erste Row (Columnnames)
16 var row = sheet.getRow(0);
17 // Anzahl Columns
18 var noCols = row.getLastCellNum();
19 // sonstiges Variablen
20 var i = 0;
21 var j = 0;
22 var cell = "";
23 var value = "";
24 var columnnames = "";
25 var q = "";
26
27 // Spaltennamen holen
28 for (j = 0;j LT noCols;j = j + 1) {
29 try {
30 cell=row.getCell(JavaCast('short','#j#'));
31 // je nach Typ Daten numerisch oder als string holen
32 if (cell.getCellType() is 1) {
33 columnnames = listappend(columnnames,cell.getStringCellValue());
34 }
35 else if (cell.getCellType() is 0) {
36 columnnames = listappend(columnnames,cell.getNumericCellValue());
37 }
38 } catch (Any expt) {
39 // nothing happens
40 }
41 }
42 columnnames = replace(columnnames," ","","all");
43 // Query erstellen
44 q = querynew(columnnames);
45 // Daten holen ab Row 2
46 for (i = 1;i LTE noRows;i = i + 1) {
47 row=sheet.getRow(JavaCast('int','#i#'));
48 // Row hinzuf�gen
49 queryAddRow(q);
50 for (j = 0;j LT noCols;j = j + 1) {
51 try {
52 cell=row.getCell(JavaCast('short','#j#'));
53 if (cell.getCellType() is 1) {
54 value=cell.getStringCellValue();
55 }
56 else if (cell.getCellType() is 0) {
57 value=cell.getNumericCellValue();
58 }
59 } catch (Any expt) {
60 value="ups";
61 }
62 // Wert in Query schreiben
63 QuerySetCell(q,listGetAt(columnnames,j + 1),value);
64 }
65 }
66 // Datei schlie�en
67 infile.close();
68 // Ergebnis zur�ckgeben
69 return q;
70 }
71 </cfscript>




Für diesen Eintrag existieren keine Kommentare.
[Kommentar hinzufügen] [Kommentare verfolgen]