Как конвертировать буферный файл as400 в файл Excel (XLS)
Я новичок в разработке as400 Java (JT400). Я получаю список буферных файлов и читаю его обычным текстом. Теперь я хочу преобразовать его в файл Excel (XLS). Я пытаюсь преобразовать буферный файл AS400 в файл Excel (XLS), используя Java.but im faild. Кто-нибудь знает, как это сделать? Могу ли я конвертировать его непосредственно из as400? Кто-нибудь знает, как преобразовать этот буферный файл (или этот текстовый файл) в файл Excel с помощью Java?
заранее спасибо!
МОЙ из буферизованного файла вот так:
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
...так далее
3 ответа
Есть две библиотеки, которые поддерживают прямое преобразование в Excel: Apache POI и jExcel.
Кроме того, JasperReports - это библиотека отчетов высокого уровня, которая поддерживает экспорт в Excel в дополнение к PDF и т. Д.
Реальная проблема заключается в том, как вы ожидаете отобразить свободный текущий формат, такой как ваш пример, в формат строки и столбца, такой как Excel?
Если у вас есть буферный файл, как
DATE TIME NAME
12345678901234
Вы можете сохранить в файл свою катушку. Способ, которым я пользуюсь (надеюсь, это поможет)... как правило, он имеет только одно поле, и вам нужно генерировать различные поля по позиции. Вы можете создать запрос, например, такой как substr(поле, 1, 4) для даты, substr(поле, 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
у которого нет пути, поэтому он входит в текущий каталог. Так как мой текущий каталог сопоставлен с сетевым диском на моем ПК, я могу просто открыть файл в LibreOffice Calc (здесь нет необходимости в Excel).
Это все, что нужно сделать.
Технически, это еще не все, потому что я создал команду с именем CATSPLF, которая принимает имя задания, имя и номер спулфилла и т. Д. И создает для меня строку Qshell CMD(). Это значительно облегчает выполнение запроса несколькими способами, например, в качестве зарегистрированной пользовательской функции для команды WRKSPLF и в других местах.
Естественно, в таблице нет определения "ячеек", когда я это делаю. Это нужно сделать вручную, когда я открою файл. Если "ячейки" нужны регулярно, есть два основных варианта, отличных от ручного: начать писать программы для этого или купить продукт.
Но я редко вижу смысл открывать буферный файл в Excel (или в Calc, или в любой другой программе для работы с электронными таблицами). Я бы не стал так же пытаться открыть буферный файл из спулера Windows (что было бы настоящим кошмаром), и я никогда не слышал, чтобы кто-нибудь еще пытался это сделать; поэтому я не могу понять, почему люди так часто делают это в линейке AS/400. Почти всегда есть намного лучшие способы поместить данные в электронную таблицу.