For this reason I started messing around with the apache project POI. This project has pure java ports of file formats based on Microsoft’s OLE 2 Compound
Document Format. So it has classes for creating excel spreadsheets without having excel installed on the server, which would make the admins happy. So I created this simple class to create and write rows to an excel file.
package com.clr.excel;
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelWriter {
private int curRow;
private HSSFWorkbook curWB;
private HSSFSheet curSheet;
public boolean writeExcelHeader(String[] rowValues) {
try {
this.curRow = 0;
this.curWB = new HSSFWorkbook();
this.curSheet = this.curWB.createSheet(“Sheet1”);
//This will write the header row
return(this.writeToExcel(rowValues));
} catch(Exception ex) {
ex.printStackTrace();
return(false);
}
}
public boolean writeToExcel(String[] rowValues) {
try {
HSSFRow row = this.curSheet.createRow(this.curRow);
for(int i = 0; i < rowValues.length; i++) {
row.createCell(i).setCellValue(new HSSFRichTextString(rowValues[i]));
}
this.curRow++;
} catch(Exception ex) {
ex.printStackTrace();
return(false);
}
return(true);
}
public boolean writeExcelFile(String fileName) {
try {
//Auto fit content
for(int i = 0; i < 20; i++) {
this.curSheet.autoSizeColumn((short)i);
}
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream(fileName);
this.curWB.write(fileOut);
fileOut.close();
} catch(Exception ex) {
ex.printStackTrace();
return(false);
}
return(true);
}
}
Again I used LS2J to use this class from my lotusScript agent.
These declarations are needed to use LS2J
Uselsx “*javacon”
Use “ExcelWriter”
Agent to create excel sheet.
Sub Initialize
On Error Goto ErrorHandler
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim js As JAVASESSION
Dim xlWriterClass As JAVACLASS
Dim xlWriterObject As JavaObject
Dim rowValues(1 To 3) As String
Dim folderName As String
Print “Started Running CreateExcel”
folderName = “C:Temp”
‘Initialize column headers
rowValues(1) = “Title”
rowValues(2) = “Date”
rowValues(3) = “Name”
‘Initialize Excel Writer class
Set js = New JAVASESSION
Set xlWriterClass = js.GetClass(“com.clr.excel.ExcelWriter”)
Set xlWriterObject = xlWriterClass.CreateObject
If(Not(xlWriterObject.writeExcelHeader(rowValues)))Then
Print “Error creating excel sheet!”
Exit Sub
End If
Set db = session.CurrentDatabase
Set view = db.GetView(“MainView”)
Set doc = view.GetFirstDocument
Do While(Not(doc Is Nothing))
rowValues(1) = doc.Title(0)
rowValues(2) = doc.selectedDate(0)
rowValues(3) = doc.Name(0)
‘Write metadata
If(Not(xlWriterObject.writeToExcel(rowValues)))Then
Print “Could not write to excel!”
End If
Set doc = view.GetNextDocument(doc)
Loop
Finished:
xlWriterObject.writeExcelFile(folderName & “workbook.xls”)
Exit Sub
ErrorHandler:
Print “Error ” & Error & ” on line: ” & Erl
Resume Finished
End Sub
Enjoy the code here.