Groovy - 如何定期将数据刷新到excel文件中

时间:2015-09-16 13:51:53

标签: excel groovy soapui jxl

我正在编写一个groovy代码(在SoapUI工具中)来创建excel文件并定期将数据刷入其中。 这个想法是,如果由于某些异常/中断代码没有完成,我应该在excel中获取数据直到出现错误/问题的时间。

我正在使用outputStream.flush(),如下所示。 以下是我的示例代码。

import jxl.*
import jxl.write.*
import java.io.IOException;
import java.io.OutputStream;

    WritableWorkbook workbook;
    WritableSheet sheet;
    try{
       log.info ("    >>    Start");
       def times;
       def currentTime = times = new Date().format("dd-MM-yyyy HH-mm-ss");  

       OutputStream outputStream = new FileOutputStream("C:/Users/user1/Result-"+currentTime+".xls");

       WorkbookSettings workbookSettings = new WorkbookSettings();
       workbook = Workbook.createWorkbook(outputStream);

       sheet = workbook.createSheet("Sample 1",0);

       for(int i=0;i<10;i++){

         Label noScenarioSetLabel1 = new Label(0, i, "NO SCENARIO SET FOR EXECUTION"); 
         sheet.addCell(noScenarioSetLabel1);

         outputStream.flush();

         Thread.sleep(1000);

        }
    workbook.write();
    workbook.close();
    log.info ("    >>    End");

}catch(Exception exp){
    log.error ("Some Exp occurred : "+exp.toString());
    workbook.write();
    workbook.close();
}

这不是每次刷新都写入数据。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:0)

是。您没有为要刷新的流写入任何数据。

通过workbook.write()方法将Excel数据写入输出流。你没有在for循环中调用该方法。因此,您可以在刷新前简单地调用workbook.write()

Groovier解决方案

这是编写程序的Groovier方法:

import jxl.*
import jxl.write.*

log.info ("    >>    Start")
def times;
def currentTime = times = new Date().format("dd-MM-yyyy HH-mm-ss") 

new FileOutputStream("C:/Users/user1/Result-${currentTime}.xls").withStream {outputStream ->
   def workbook = Workbook.createWorkbook(outputStream)
   def sheet = workbook.createSheet('Sample 1',0)

    0.upto(9) { 
         sheet.addCell new Label(0, it, 'NO SCENARIO SET FOR EXECUTION')  
         workbook.write()    
         outputStream.flush()        
         Thread.sleep(1000)
    }      

    workbook.write() 
    workbook.close()
    log.info ("    >>    End")
}

答案 1 :(得分:0)

像这样的图书馆(比如说“文件制作者”)一般都有“完成前冲洗”的问题。 他们建造多层结构等,我猜,我几乎可以肯定,建筑的大部分是在关闭单元格,行,页面,工作表的时候完成的......

查看4级构造函数调用(打开),理论上flush应传播相同级别(相同或相反顺序)

智力运动: 如何刷新一半的行,这在输出文档中是正式的非法,没有End Of Row?或者:如何刷新具有不良细胞计数的行

免责声明:我不使用jxl,但很少使用其他文档接口。在非常深的结构文档中,iText几乎不可能成功刷新异常,是没有意义的。

如果您有异常风险,可能会在第一阶段将数据转换为更简单的结构(经典:地图,列表等),然后第二次通过(安全)并建立文档?