<p>I am pretty new to BIRT and my Job is to create some fancy Graphics/Charts from our Data which is saved in an ExcelSheet looking like this (It is saved on a Stages Webserver - it doesnt really matter , just for complete Information):<br>
They are listed in Groups by Rows and I have to get each Group and do Graphics out of them.</p>
<p>Currently, I am simply trying to read each Group manual where it starts and till it ends.</p>
</p>
<p>//_______________________________________________________________________________________________<br>
//Functions for value storage<br>
//_______________________________________________________________________________________________<br><br>
function dumpValues(file) {<br>
if (file !=null) {<br>
var wb = new WorkbookFactory.create(file); // For XLSX / XLS Files<br>
// var sheet = wb.getSheetAt(0);<br>
var sheet = wb.getSheet("Sheet"); // Name of targeted sheet<br>
var myRow = 1;<br>
var myCol = 1;<br>
var ProcessRow = 1;<br><br>
// Getting filled columns<br>
for (myCol = 1; cellValue(sheet,myRow,myCol) != "....." || !isCellEmpty(sheet,ProcessRow,myCol); myCol++){<br>
if(!isCellEmpty(sheet,ProcessRow,myCol) ){<br><br><br>
dataset.setColumnValue("debug",getStringValue(sheet,myRow,myCol).split("\\.")[0]);<br>
<br><br>
dataset.setColumnValue("Date",getDateValue(sheet,myRow,myCol));<br><br>
dataset.setColumnValue("A#1",cellValue(sheet,ProcessRow,myCol)); dataset.setColumnValue("A#2",cellValue(sheet,ProcessRow+1,myCol)); <br>
dataset.setColumnValue("A#3",cellValue(sheet,ProcessRow+1,myCol)); <br>
<br>
dataset.storeResultRow();<br>
}<br>
}<br>
}<br>
return;<br>
}<br><br><br>
// Stuff I need to read the XLSM File from Stages</p>
<div>//______________________________________________________________________________</div>
<div>// Main</div>
<div>//______________________________________________________________________________</div>
<div>var ArtifactName = "DefaultMetrik"; // Name of "Work Product" ( Artifact Name )</div>
<div>var ArtifactInstanceName = "File.xlsm"; // Name of File in Work Products Artifact</div>
<div>var process = pkit.getCurrentProject().getEntities("containsProcess@SYSTEM");</div>
<div>if (process.length !=0 ) {</div>
<div>var artifacts = process[0].getEntities("containsArtifact@SYSTEM"); // Choose Process</div>
<div>if (artifacts[0].getProperty("DisplayName") == ArtifactName) {</div>
<div>var artifacts_instances = artifacts[0].getEntities("containsInstance@SYSTEM");</div>
<div> </div>
<div>var filestream = artifacts_instances[artifacts_instances.length-1].getProperty("FileStream");</div>
<div>dumpValues(filestream);<span> </span></div>
<div> </div>
<div> </div>
<div>}</div>
<div>}</div>
<p>
</p>
<p>The Functions used here are to read from an XLXS File </p>
<p> </p>
<p>
</p>
<p>//_______________________________________________________________________________________________<br>
// Functions for Excel sheets<br>
//_______________________________________________________________________________________________<br><br>
function getNumericValue(sheet,row, col) {<br>
Row = sheet.getRow(row);<br>
if (Row != null) {<br>
Cell = Row.getCell(col);<br>
if (Cell != null) {<br>
return(Cell.getNumericCellValue());<br>
}<br>
}<br>
return "";<br>
}<br>
function getStringValue(sheet,row, col) {<br>
Row = sheet.getRow(row);<br>
Cell = Row.getCell(col);<br>
if (Cell != null) {<br>
if (Cell.getCellType() == Cell.CELL_TYPE_STRING) {<br>
return Cell.getStringCellValue();<br>
}<br>
}<br>
return "";<br>
}<br>
function getDateValue(sheet,row, col) {<br>
Row = sheet.getRow(row);<br>
Cell = Row.getCell(col);<br>
if (Cell != null) {<br>
if ((Cell.getCellType() == Cell.CELL_TYPE_NUMERIC)<br>
|| (Cell.getCellType() == Cell.CELL_TYPE_FORMULA)) {<br>
return Cell.getDateCellValue();<br>
}else<br>
if(Cell.getCellType()== Cell.CELL_TYPE_STRING){<br>
var date = new Date();<br>
var day = Cell.getStringCellValue().split("\\.")[0];<br>
var month = Cell.getStringCellValue().split("\\.")[1];<br>
var year = Cell.getStringCellValue().split("\\.")[2];<br>
date = new Date(year,month-1,day);<br>
return date;<br>
<br>
}<br>
}<br>
return "";<br>
}<br>
/* taken vom <a data-ipb='nomediaparse' href='
http://trephine.org/t/index.php?title=Extracting_Excel_data_with_Apache_POI_and_Rhino'>http://trephine.org/t/index.php?title=Extracting_Excel_data_with_Apache_POI_and_Rhino</a> */ <br>
function cellValue(sheet, CellRow, CellCol) {<br>
row = sheet.getRow(CellRow);<br>
if (row != null) {<br>
cell = row.getCell(CellCol);<br>
if (cell != null) {<br>
var t = cell.cellType;<br>
if (t == Cell.CELL_TYPE_NUMERIC) { <br>
if (DateUtil.isCellDateFormatted(cell)) return new Date(cell.dateCellValue.time);<br>
else return cell.numericCellValue + 0.0;<br>
}<br>
if (t == Cell.CELL_TYPE_STRING) return cell.stringCellValue + '';<br>
if (t == Cell.CELL_TYPE_FORMULA) {<br>
try {<br>
if (DateUtil.isCellDateFormatted(cell)) return new Date(cell.dateCellValue.time);<br>
else return cell.numericCellValue + 0.0;<br>
} catch(err) { }<br>
try { return cell.stringCellValue + ''; } catch(err) { }<br>
try { return cell.numericCellValue + 0.0; } catch(err) { }<br>
try { return !!cell.booleanCellValue; } catch(err) { }<br>
try { return cell.errorCellValue + 0; } catch(err) { }<br>
return '';<br>
}<br>
if (t == Cell.CELL_TYPE_BLANK) return '';<br>
if (t == Cell.CELL_TYPE_BOOLEAN) return !!cell.booleanCellValue;<br>
if (t == Cell.CELL_TYPE_ERROR) return cell.errorCellValue + 0;<br>
}<br>
}<br>
return null;<br>
}<br>
function isCellEmpty(sheet,row, col) {<br>
Row = sheet.getRow(row);<br>
if (Row != null) {<br>
Cell = Row.getCell(col);<br>
if (Cell != null) {<br>
if (Cell.getCellType() != Cell.CELL_TYPE_BLANK) {<br>
return false;<br>
}<br>
}<br>
}<br>
return true;<br>
} </p>
<p> </p>
<p>
<br>
This worked quite a while thou the Original File has about 600 Rows +- a bit.<br>
I builded myself a Script, that creates a Report with the needed DataSet's and JavaScritp. It works but changeing it (I am sorry) sucks ****.<br>
Now the File length has changed , and I got sick of changeing my Script.<br><br><br>
Is it possible, to read the Excel File, dynamicly build DataSets ( or just Columns ) , save the Data and done ?</p>