Как преобразовать буферный файл as400 в файл excel (XLS)

Я новичок в разработке Java as400 (JT400). Я получаю список буферных файлов и читаю его в обычном тексте. теперь я хочу преобразовать его в файл excel (XLS). Я пытаюсь преобразовать буферный файл AS400 в файл excel (XLS) с помощью Java. Но мне не удалось. Кто-нибудь знает, как это сделать? Могу ли я преобразовать его напрямую из 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 

...и т.д


person sheanD    schedule 17.09.2013    source источник
comment
Я бы взглянул на библиотеку Apache POI. Он предназначен для обработки формата Microsoft, включая Excel. Если вы хотите справиться с этим самостоятельно, вы также можете просто записать его в виде обычного файла CSV (значения, разделенные запятыми), который также откроет Excel.   -  person CodeChimp    schedule 17.09.2013
comment
Я не знаю о файле CSV. Можете ли вы рассказать мне о файле CSV. Как написать файл CSV. Большое спасибо за помощь :)   -  person sheanD    schedule 17.09.2013
comment
CSV-файл = значения, разделенные запятыми. В гугле есть подробности.   -  person Tim Williams    schedule 17.09.2013
comment
Файл CSV — это просто файл, в котором каждая строка разделена символом возврата каретки, а каждое значение — запятой. Я считаю, что есть несколько библиотек Java, которые могут помочь в создании CSV, но достаточно просто написать его. Недостатком CSV является то, что он содержит только текст, поэтому вы не можете использовать формулы или любое форматирование (жирный шрифт, курсив и т. д.), как в файле XLS (Excel). Но это самый простой формат, который вы можете вывести, чтобы получить матрицу материала.   -  person CodeChimp    schedule 17.09.2013
comment
мои буферные файлы не совпадают. тогда мне нужно написать deferent файлы CSV. это слишком сложно :(   -  person sheanD    schedule 17.09.2013
comment
Все ли ваши буферные файлы будут исходными элементами? Если да, то чего вы действительно пытаетесь достичь, конвертируя их все в файлы Excel?   -  person Benny Hill    schedule 18.09.2013
comment
Файлы спула генерируются операционной системой или другим программным обеспечением, поставляемым с системой? Это приведет к зависимостям выпуска. Если вы просканируете буферный файл для извлечения данных, что вы собираетесь делать, когда IBM изменит способ представления отчета? Пожалуйста, объясните более подробно, чего вы пытаетесь достичь, и мы поможем вам избежать проблем с дизайном, которые могут вызвать у вас горе.   -  person WarrenT    schedule 18.09.2013
comment
Почему вы хотите преобразовать список компиляции в электронную таблицу Excel? (Возможно, это должен был быть XML?)   -  person WarrenT    schedule 19.09.2013


Ответы (3)


Существует две библиотеки, поддерживающие прямое преобразование в Excel: Papache POI и jExcel.

Кроме того, JasperReports — это библиотека отчетов более высокого уровня, которая поддерживает экспорт в Excel в дополнение к PDF, и Т. Д.

Реальная проблема заключается в том, как вы собираетесь сопоставлять свободный формат, такой как ваш пример, с форматом строки и столбца, таким как Excel?

person James Allman    schedule 17.09.2013

Если у вас есть буферный файл, например

 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){...}
person AndreaTaroni86    schedule 13.03.2014

Простейшей для меня является команда, подобная этой:

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. Почти всегда есть гораздо лучшие способы получить данные в электронной таблице.

person user2338816    schedule 30.04.2014