我是as400 Java开发(JT400)的新手。我得到了假脱机文件列表并读取了普通文本。现在我想将其转换为Excel(XLS)文件。我正在尝试使用 Java 将 AS400 假脱机文件转换为 excel(XLS) 文件,但我失败了。有人知道怎么做吗?我可以直接从 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 o u r c e L i s t i n g
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 A E 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=I N 1 1 *IN03 1000002
9=I N 2 2 *IN06 1000003
10=I S 3 8 0$CUSID 1000004
11=I A 9 33 $CUSNAME 1000005
12=I A 34 58 $CUSADD1 1000006
13=I A 59 83 $CUSADD2 1000007
14=I A 84 108 $CUSADD3 1000008
15=I S 109 118 0$TELNO 1000009
16=I S 119 133 3$CRDLMT 1000010
17=ICUSREC 2000001
*--------------------------------------------------------------------------------------------* 2
* RPG record format . . . . : CUSREC * 2
* External format . . . . . : CUSREC : XXXXXXXXX/SSSSSS * 2
*--------------------------------------------------------------------------------------------* 2
18=I P 1 4 0CUSID 2000002
19=I A 5 29 CUSNAME 2000003
20=I A 30 54 CUSADD1 2000004
21=I A 55 79 CUSADD2 2000005
22=I A 80 104 CUSADD3 2000006
23=I S 105 114 0TELNO 2000007
24=I S 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。
真正的问题是您希望如何将自由流动的格式(例如您的示例)映射到 Excel 等行和列格式?
如果你有一个假脱机文件,比如
DATE TIME NAME
12345678901234
您可以保存以归档您的假脱机。我使用的方式(希望有帮助)...从本质上讲,它只有一个字段,您需要按位置生成各种字段。您可以通过查询生成一个文件,例如 substr(field, 1, 4) 表示日期,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。在上面的示例中,它被重定向到名为 mysplftxt.spl
的流文件,该文件没有路径,因此它会进入当前目录。由于我当前的目录映射到PC中的网络驱动器,因此我可以简单地在LibreOffice Calc中打开该文件(此处不需要Excel)。
仅此而已。
好吧,从技术上讲,它还有更多功能,因为我创建了一个名为CATSPLF的命令,该命令接受作业名称,假脱机文件名和编号等,并为我构造Qshell CMD()字符串。这使得以多种方式发出请求变得更加容易,例如作为 WRKSPLF 命令的注册用户函数和其他地方。
当然,当我这样做时,电子表格中没有"单元格"的定义。当我打开文件时,这需要手动完成。如果经常需要"细胞",除了手动之外,还有两个通用选项:开始编写程序来执行此操作或购买产品。
但是我很少看到在Excel(或Calc或任何其他电子表格程序)中打开假脱机文件有任何意义。我不会尝试类似的方式从 Windows 后台处理程序打开假脱机文件(这将是一场真正的噩梦),我也从未听说过其他人尝试这样做;所以我无法弄清楚为什么人们想在 AS/400 系列中如此频繁地这样做。几乎总是有更好的方法将数据放入电子表格中。