如何将as400 Spooled文件转换为Excel(XLS)文件
我是新的Java开发400(JT400)。我得到假脱机文件列表,并阅读正常文本。 现在我想将其转换为Excel(XLS)文件。 我试图将AS400假脱机文件转换为Excel(XLS)文件使用Java.but im faild。 任何人都知道如何做到这一点? 我可以直接从as400转换吗? 谁知道如何将这个假脱机文件(或这个文本文件)转换为使用Java的Excel文件?
提前致谢!
我的一个假脱机文件是这样的:
5722WDS V5R3M0 030905 RN IBM ILE RPG XXXXXXXXX/XXXX SSSS 10/01/11 06:19:46 Page 1 Command . . . . . . . . . . . . : CRTBNDRPG Issued by . . . . . . . . . . : XXXXXXXXX Program . . . . . . . . . . . . : CUSR Library . . . . . . . . . . . : XXXXXXXXX Text 'description' . . . . . . . : *SRCMBRTXT Source Member . . . . . . . . . : CUSR Source File . . . . . . . . . . : XXXXXXXXX Library . . . . . . . . . . . : XXXXXXXXX CCSID . . . . . . . . . . . . : 273 Text 'description' . . . . . . . : Last Change . . . . . . . . . . : 10/01/11 06:19:41 Generation severity level . . . : 10 Default activation group . . . . : *YES Compiler options . . . . . . . . : *XREF *GEN *NOSECLVL *SHOWCPY *EXPDDS *EXT *NOSHOWSKP *NOSRCSTMT *DEBUGIO *NOEVENTF Debugging views . . . . . . . . : *SOURCE Output . . . . . . . . . . . . . : *PRINT Optimization level . . . . . . . : *NONE Source listing indentation . . . : *NONE Type conversion options . . . . : *NONE Sort sequence . . . . . . . . . : *HEX Language identifier . . . . . . : *JOBRUN Replace program . . . . . . . . : *YES User profile . . . . . . . . . . : *USER Authority . . . . . . . . . . . : *LIBCRTAUT Truncate numeric . . . . . . . . : *YES Fix numeric . . . . . . . . . . : *NONE Target release . . . . . . . . . : *CURRENT Allow null values . . . . . . . : *NO Define condition names . . . . . : *NONE Enable performance collection . : *PEP Profiling data . . . . . . . . . : *NOCOL Licensed Internal Code options . : Generate program interface . . . : *NO Include directory . . . . . . . : Preprocessor options . . . . . . : *NONE 5722WDS V5R3M0 030905 RN IBM ILE RPG XXXXXXXXX/XXXX SSSS 10/01/11 06:19:46 Page 2 Line <---------------------- Source Specifications ----------------------------><---- Comments ----> Do Page Change Src Seq Number ....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+...10 Num Line Date Id Number S ource L isting 1 110917 000100 2 FCUS00D CF E WORKSTN 110917 000200 *--------------------------------------------------------------------------------------------* * RPG name External name * * File name. . . . . . . . . : CUS00D XXXXXXXXX/SSSSSS * * Record format(s) . . . . . : RECORD RECORD * *--------------------------------------------------------------------------------------------* 3 FCUSMAS01 UF AE DISK 110917 000300 4 110917 000400 5 /Free 110917 000500 6 110917 000600 *--------------------------------------------------------------------------------------------* * RPG name External name * * File name. . . . . . . . . : CUSMAS01 XXXXXXXXX/SSSSSS * * Record format(s) . . . . . : CUSREC CUSREC * *--------------------------------------------------------------------------------------------* 7=IRECORD 1000001 *--------------------------------------------------------------------------------------------* 1 * RPG record format . . . . : RECORD * 1 * External format . . . . . : RECORD : XXXXXXXXX/SSSSSS * 1 *--------------------------------------------------------------------------------------------* 1 8=IN 1 1 *IN03 1000002 9=IN 2 2 *IN06 1000003 10=IS 3 8 0$CUSID 1000004 11=IA 9 33 $CUSNAME 1000005 12=IA 34 58 $CUSADD1 1000006 13=IA 59 83 $CUSADD2 1000007 14=IA 84 108 $CUSADD3 1000008 15=IS 109 118 0$TELNO 1000009 16=IS 119 133 3$CRDLMT 1000010 17=ICUSREC 2000001 *--------------------------------------------------------------------------------------------* 2 * RPG record format . . . . : CUSREC * 2 * External format . . . . . : CUSREC : XXXXXXXXX/SSSSSS * 2 *--------------------------------------------------------------------------------------------* 2 18=IP 1 4 0CUSID 2000002 19=IA 5 29 CUSNAME 2000003 20=IA 30 54 CUSADD1 2000004 21=IA 55 79 CUSADD2 2000005 22=IA 80 104 CUSADD3 2000006 23=IS 105 114 0TELNO 2000007 24=IS 115 129 2CRDLMT 2000008 25 Exfmt record; 110917 000700 26 Dow Not *IN03; B01 110924 000800 27 If $CUSID <> *Zeros; B02 111001 000801 28 Chain (CUSID) CUSREC; 02 111001 000802 29 If %Found(CUSMAS01); B03 111001 000803
…等等
有两个库支持直接转换为Excel: Apache POI和jExcel 。
此外, JasperReports是一个更高级的报告库,除了支持PDF等外,还支持导出到Excel。
真正的问题是你如何期望将自由stream动的格式(如您的示例)映射到像Excel这样的行和列格式?
如果你有一个假脱机文件
DATE TIME NAME 12345678901234
您可以保存到您的假脱机文件。 我使用的方式(希望它有帮助)…它只有一个领域,你需要按位置生成各个领域。 你可以通过查询产生像substr(field,1,4)这样的文件作为date,substr(field,6,4)的时间等等。 与Java我喜欢使用Apache POI,像这样..
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
……………………..
wbk=new SXSSFWorkbook(500); sheet=vbk.createSheet("book 1"); try{ Row rowhead=sheet.createRow(0); rowhead.createCell(0).setCellValue("Hello"); ... <Here you fill the Excel with the resultset of your query to the AS400 file using JT400> ... FileOutputStream fileOut = new FileOutputStream(excelPath); wbk.write(fileOut); fileOut.flush(); fileOut.close(); }catch(Exception e){...}
对我来说最简单的是一个类似于这样的命令:
qsh cmd('touch -C 1252 mysplftxt.spl && catsplf -j 987654/myuser/myjob mysplf 1 >mysplftxt.spl' )
Qshell catsplf实用程序将假脱机文件放入STDOUT。 在上面的例子中,它被redirect到一个没有path的名为mysplftxt.spl
的stream文件,所以它进入当前目录。 由于我的当前目录映射到我的电脑中的networking驱动器,我可以在LibreOffice Calc(这里不需要Excel)中打开文件。
这里的所有都是它的。
那么在技术上呢,还有更多呢,因为我创build了一个命名为CATSPLF的命令,它接受作业名称,假脱机文件名称和编号等,并为我构buildQshell CMD()string。 这使得以诸如WRKSPLF命令和其他地方的注册用户函数的方式进行请求变得更容易。
当然,当我这样做时,电子表格中没有“单元格”的定义。 当我打开文件时需要手动完成。 如果需要定期使用“细胞”,除了手册外,还有两个通用选项:开始编写程序或购买产品。
但我很less看到在Excel中打开假脱机文件(或在Calc或其他电子表格程序中)的任何一点。 我不会尝试类似的从Windows假脱机程序打开一个假脱机文件(这将是一个真正的噩梦),我从来没有听说过任何其他人试图做到这一点; 所以我不明白为什么人们想在AS / 400系列中经常这样做。 几乎总是有更好的方法将数据导入电子表格。