tiptop使用java的poi包实现EXCEL导入导出功能

4gl可以调用java的poi包实现EXCEL的导入导出,今天分享一个EXCEL导入的功能! 
一:环境搭建 
1:poi文件导入 
首先下载POI文件(找不到的可以私信我),解压后上传到ERP的服务器中 
一般位置放在$TOP/ds4gl2/bin/javaad/jar,当然,你也可以根据喜好自行定义! 
然后,在系统中编辑tiptop_env文件,路径在$TOP/bin/tiptop_env 这里(重要文件,编辑前记得备份,弄坏了会导致系统瘫痪) 
打开文件,将CLASSPATH 的环境变量添加一个poi文件的路径, 
范例:CLASSPATH=$TOP/ds4gl2/bin/poi-3.17.jar:$TOP/ds4gl2/bin/caozq/jxl.jar;export CLASSPATH(系统有CLASSPATH变量用在后面加,用:隔开其他的变量,没有就再文末添加) 
2:第一个步骤配置好了后,就可以愉快的调用java的poi包啦~

以下为导入功能使用范例,可以参考

# Pattern name...: cl_import_czq_excel.4gl
# Descriptions...: 采用Java POI方式导入MS Excel
# Date & Author..: 18/09/18 caozq
IMPORT os
IMPORT JAVA org.apache.poi.ss.usermodel.IndexedColors
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFDataFormat
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFWorkbook
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFSheet
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFRow
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFCell
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFCellStyle
IMPORT JAVA org.apache.poi.hssf.usermodel.HSSFFont
IMPORT JAVA org.apache.poi.poifs.filesystem.POIFSFileSystem
IMPORT JAVA java.io.InputStream
IMPORT JAVA java.io.FileInputStream
DATABASE ds

GLOBALS "../../config/top.global"

DEFINE fs         POIFSFileSystem
DEFINE wb         HSSFWorkbook 
DEFINE sheet      HSSFSheet
DEFINE row        HSSFRow 
DEFINE is         InputStream

FUNCTION cl_import_czq_excel()
DEFINE l_prostr   LIKE ze_file.ze03  
DEFINE l_fileLocation   STRING 
DEFINE colnum,rowcount     INT
DEFINE i,j          INT 
DEFINE l_str,l_str1      STRING
DEFINE l_tempdir    STRING
DEFINE l_filename   LIKE type_file.chr1000

#选择要导入资料的Excel文件  BEGIN
LET l_prostr = cl_getmsg("lib-201", g_lang)  
WHILE TRUE   
PROMPT l_prostr CLIPPED FOR l_fileLocation ATTRIBUTE(WITHOUT DEFAULTS)  
   ON ACTION browse_document  
      LET l_fileLocation = cl_browse_file()  

   ON ACTION ACCEPT  
      EXIT WHILE  

   ON ACTION CANCEL  
      EXIT WHILE  

   ON IDLE g_idle_seconds  
      CALL cl_on_idle()  
      RETURN  
END PROMPT  
END WHILE 
#选择要导入资料的Excel文件  END 

LET l_tempdir =fgl_getenv("TEMPDIR")  #获取临时文件夹路径
LET l_filename = os.Path.basename(l_fileLocation)  #获取导入文件名
LET l_str = os.Path.join(l_tempdir CLIPPED,l_filename CLIPPED) #拼接成服务器的完整路径
IF NOT cl_upload_file(l_fileLocation,l_str) THEN  #将文件先上传到临时文件夹
      CALL cl_err(NULL, "lib-212", 1)
      RETURN 
END IF 

LET is = FileInputStream.create(l_str)    
LET fs = POIFSFileSystem.create(is)
LET wb = HSSFWorkbook.create(fs)
LET sheet = wb.getSheetAt(0)    #获取EXCEL第一个页签
LET row = sheet.getRow(0)       #获取第一列标题栏
LET colnum = row.getPhysicalNumberOfCells()    #获取列总数

LET rowcount = sheet.getPhysicalNumberOfRows()  #获取总行数
FOR i = 1 TO rowcount - 1   #从第二行开始循环  
  LET row = sheet.getRow(i)
  FOR j = 0 to colnum-1   #已标题栏列数为准

  LET l_str1 = row.getCell(j)    #这里写程序逻辑

  END FOR

END FOR

END FUNCTION

 

你可能感兴趣的:(tiptop)