如何从主机数据集中提取(导入)数据到excel表

时间:2013-03-07 16:04:13

标签: excel mainframe zos

我想构建一个小应用程序来计算批处理流程的关键批处理。 作为输入,我需要使用大型机数据集。如果可能,那就是动态,也就是说,我可以选择当时适用的字段。

我在互联网上搜索过这个,但没有发现任何适合我想做的事情。 有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

  

我在大型机库中有一个数据集,我想将该文件ftp到Excel。

在大型机上将文件转换为CSV(例如,通过REXX exec,z / OS UNIX shell脚本或Lua4z程序), 然后通过FTP将该CSV文件插入Excel。

您无需将CSV文件传输到PC的文件系统,然后,作为单独的步骤,在Excel中打开它。

而是将CSV的FTP(或HTTP)URL定义为Excel中的数据源。此技术的一个优点是您可以刷新该URL中的数据 无需在Excel中重新应用格式。

执行此操作有各种tutorials on the web

简而言之:

  1. 创建一个新的空白工作簿(我使用的是Excel 2010)。
  2. 选择空工作表中的第一个单元格(此步骤是不必要的 - 单元格已被选中 - 如果您只是刚刚创建了工作簿)。
  3. 数据标签上,点击从文字
  4. 导入文本文件对话框的文件名文本框中,输入CSV文件的FTP URL。例如:

    ftp://zos1//u/me/data.csv

    (这假设您的主机配置为允许使用此路径的FTP。)

    主机名(zos1)后面的两个连续斜杠(/)字符表示该路径引用了z / OS UNIX文件(/u/me/data.csv)。

    CSV文件必须位于z / OS UNIX路径中。 FTP客户端不接受MVS样式(dsname)路径,例如' me.csv(数据)' (即使在URL编码时;也就是说,单引号转义为%27);相比之下,cURL接受这样的路径就好了。

    大型机上的CSV文件必须是ASCII编码,而不是EBCDIC。 (这里,我使用术语ASCII不精确:您想要的精确字符编码取决于您的PC设置。您可能需要Windows-1252。)这是因为FTP客户端将默认传输类型设置为二进制

  5. 输入您的用户名和密码(您的z / OS TSO用户ID和密码)。
  6. 等待数据加载。
  7. 格式化单元格。例如,设置包含日期/时间值的任何列的格式。
  8. 数据标签上,点击连接,选择连接(指定文件名的网址时创建的Excel),然后清除复选框>刷新时提示文件名
  9. 要刷新数据,请将当前数据替换为新的FTP请求的结果:在数据标签上,点击全部刷新。数据被替换;单元格格式保持不变。

    将EBCDIC编码的CSV文件转换为ASCII

    (严格来说,我的意思是ISO-8859,而不是ASCII。)

    假设您有JCL生成以EBCDIC编码的CSV文件。您希望通过FTP将该CSV文件作为ASCII编码的z / OS UNIX(zFS)文件提供给Excel。

    使用以下DD语句替换输出CSV文件的现有DD语句:

    //OUTCSV      DD PATH='/u/me/data-ebcdic.csv',       
    //            PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
    //            PATHDISP=(KEEP,DELETE),          
    //            PATHMODE=(SIRUSR,SIWUSR,SIRGRP), 
    //            FILEDATA=TEXT                    
    

    将ddname OUTCSV替换为您的ddname,将zFS文件路径/u/me/data-ebcdic.csv替换为您要使用的路径。

    感谢FILEDATA=TEXT参数,生成的CSV文件将包含X' 15'每行末尾的字节。

    将以下步骤附加到您的JCL:

    //ICONV   EXEC PGM=IKJEFT01
    //SYSTSIN DD *
    BPXBATCH sh iconv -f IBM-037 -t iso8859-1 +
     /u/me/data-ebcdic.csv +
     > /u/me/data-ascii.csv
    /*
    //SYSPRINT DD  SYSOUT=*
    //SYSTSPRT DD SYSOUT=*
    

    如果您想知道为什么我通过iconv调用BPXBATCH作为shell命令,请执行以下操作:

    //ICONV    EXEC PGM=EDCICONV
    //         PARM=('FROMCODE(IBM-037),TOCODE(iso8859-1)')
    

    没有做得很好:它离开了X' 15'字节不变,而运行iconv作为shell命令正确地将它们转换为X' 0A'。 (z / OS 2.2。)

答案 1 :(得分:1)

您在评论中获得了一些很好的信息,共识似乎是转换为CSV(或TSV以避免数据中嵌入逗号)是最简单的路线。以下是从another answer ...

复制的更多信息
  

我强烈建议您之前将文件转换为文本格式   将它们转移到另一个具有不同代码页的框中。尝试去   处理混合文本(必须翻译其代码页)和   二进制(不得翻译其代码页,但可能   必须从big endian转换为little endian)比使用更难   事先进行转换。

     

转换很可能是通过SORT实用程序完成的   大型机。大型机SORT实用程序往往拥有大量数据   操纵功能。您可以使用其他机制   (其他实用程序,用您选择的语言编写的自定义代码,   购买套餐)但这是我们倾向于做的   情况。

     

转换平面文件后,所有数据都是文本,   您可以通过FTP或SFTP或FTPS传输它们。

...感谢您回来并添加更多信息。希望这里的人们提供足够的信息来帮助您解决问题。

答案 2 :(得分:1)

XML将是另一种可能的面向文本的解决方案。创建需要花费更多精力,但您可以在Excel中设计电子表格并另存为XML文档,然后编写程序以使用大型机数据集中的数据生成xml文本。虽然这比简单的CSV或TSV文件更难实现,但它具有实现CSV文件无法执行的电子表格公式和属性的优势。另一个优点是,您可以将XML文档附加到SMTP电子邮件备注,并以“电子表格格式”将文档提供给客户端。