RCP项目_poi下载Excel

2024-02-11 12:32
文章标签 excel 项目 下载 poi rcp

本文主要是介绍RCP项目_poi下载Excel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

poi所用的包:
poi-3.8-20120326.jar
poi-examples-3.8-20120326.jar
poi-excelant-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar
xwork-core-2.2.1.1.jar
注意:要在plugin.xml文件的Runtime中的ClassPath加入包,没有加载会访问不到
/**
* 存储sheet的数据
* @author suhuafu
*
*/
public class PaperDataVO {
public PaperDataVO() {
}
public PaperDataVO(String workbookName, List<String[]> list) {
this.workbookName = workbookName;
this.list = list;
}
private String workbookName="default";//工作表名称
private List<String[]> list = new ArrayList<String[]>();//动态值队
public String getWorkbookName() {
return workbookName;
}


 

 

@Override
public void widgetSelected(SelectionEvent e) {
int count = table.getColumnCount();
TableItem[] items =  table.getItems();
final List<String[]> list = new ArrayList<String[]>();
String[] str = null; 
for (int i = 0; i < items.length; i++) {
str = new String[count];
for (int j = 0; j < count; j++) {
str[j] = items[i].getText(j);
}
list.add(str);
}
//创建文件夹对话框
DirectoryDialog  direcory = new DirectoryDialog(getSite().getShell());
direcory.open();
final String path = direcory.getFilterPath();
//打开处理窗口
ProgressMonitorDialog pmd = new ProgressMonitorDialog(getSite().getShell());  
//创建进度条对象
IRunnableWithProgress rwp = new IRunnableWithProgress() {
@Override  
public void run(IProgressMonitor monitor){  
//totalWork为IProgressMonitor.UNKNOWN时表示不知道任务的总量   
//将在进度条上显示一个来回移动的进度条   
monitor.beginTask("正在下载..." , IProgressMonitor.UNKNOWN); 
//TODO 相应的业务逻辑  
monitor.subTask("读取数据...");
if(path != ""){
List<PaperDataVO> pdvs = new ArrayList<PaperDataVO>();
PaperDataVO paper = new PaperDataVO();
paper.setWorkbookName("报销单");
paper.setList(list);
pdvs.add(paper);
OutputStream tempOut = null;
InputStream in = null;
try {
//获取插件,获取文件的相对路径
in = Platform.getBundle("com.welldell.rcp.render.db")
.getEntry("fileTemplate/renderMain.xlsx").openStream();
//生成文件路径
String src = path+"\\报销单"+ 
DateFormatUtil.formatDateToString(new Date(System.currentTimeMillis()), DateFormatUtil.V_LONG_YMD) +".xlsx";
tempOut = new FileOutputStream(src);
WriteExcelUtil.buildExcel(in, tempOut, pdvs);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException ioe) {
// TODO Auto-generated catch block
ioe.printStackTrace();
}
}
monitor.subTask("处理完成!");
monitor.done();  
}
};  
try {
pmd.run(true, false, rwp);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}  
}
});


 

public static void buildExcel(InputStream ins, OutputStream os, List<PaperDataVO> pdvs) {
if (pdvs == null || pdvs.size() == 0) {
return;
}
try {
Sheet sheet = null;
Row row = null;//行
Cell cell = null;//单元格
Workbook wb = new XSSFWorkbook(ins);
int sheetNum = wb.getActiveSheetIndex();//模板sheet的数量
for (int i = 0; i < pdvs.size(); i++) {
PaperDataVO pdv =  pdvs.get(i);
if(sheetNum < i){
sheet = wb.getSheetAt(wb.getActiveSheetIndex());//获取激活中的sheet
}else{
sheet = wb.getSheetAt(i);
if(sheet == null)
sheet = wb.createSheet(pdv.getWorkbookName()+i);
}
List<String[]> list = pdv.getList();
int rowNum = list.size()+1;
int cellNum = sheet.getRow(0).getPhysicalNumberOfCells();
for (int j = 1; j < rowNum ; j++) {//循环行
row = sheet.createRow(j);
for (int k = 0; k < cellNum; k++) {//循环行的列
cell = row.createCell(k);
cell.setCellValue(list.get(j-1)[k]);
}
}
}
wb.write(os);
os.flush();
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}


 

这篇关于RCP项目_poi下载Excel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699782

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里