java 上传excel使用哪种插件好啊该如何处理

如何在Java项目中调用excel的表格控件? - ITeye问答
我要完成一个简单报表的设计,技术上的问题很多,目前就是如何在我的程序中调用excel的表格控件,让我的程序能显示出像excel那样的表格,然后我再去编辑,保存什么的。
请问如何调用呢?是要下个什么插件吗?还是直接有专门的语句调用呢?
当然我想的不仅仅是调用excel的表格控件,还有它的工具控件。
以此延伸的问题,我怎么调用word,系统等里的控件呢?
还是有pageoffice吧,可以在线编辑excel,还可以编程操作excel文件中的数据
直接用帆软报表就OK了,因为它是类excel设计的,所以各种界面都是和excel类似,也具有excel的相应功能
楼上两位都没有看到作者是发布在Swing版面的。
可参考如下文章。
swing实现
http://topic.csdn.net/u//01eff963-2538-48dc-a38f-4cbf2cc52837.html?90746
或者使用报表工具嵌入到JFrame中,例如ireport等工具支持Excel,word等多种格式
看看这个例子 希望对你有帮助!
package com.cari.web.
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.io.OutputS
import java.util.I
import java.util.L
import jxl.W
import jxl.write.L
import jxl.write.WritableCellF
import jxl.write.WritableF
import jxl.write.WritableS
import jxl.write.WritableW
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseE
import com.sun.xml.internal.bind.v2.model.core.ClassI
public class outecell {
public void exportClassroom(OutputStream os) throws ParseException {
WritableWorkbook wbook= Workbook.createWorkbook(os); //建立excel文件
WritableSheet wsheet = wbook.createSheet("监测报表", 0); //工作表名称
//设置Excel字体
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 10,
WritableFont.BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK);
WritableCellFormat titleFormat = new WritableCellFormat(wfont);
String[] title = { "通道名称", "特征值类型", "最大值", "最小值","平均值" };
//设置Excel表头
for (int i = 0; i & title. i++) {
Label excelTitle = new Label(i, 0, title[i], titleFormat);
wsheet.addCell(excelTitle);
int c = 1; //用于循环时Excel的行号
//ClassroomService cs = new ClassroomService();
List jiancebaobiao=
//List list = cs.findAllClassroom(); //这个是从数据库中取得要导出的数据
Iterator it = jiancebaobiao.iterator();
while (it.hasNext()) {
&&&&&&& ClassroomDTO crdto = (ClassroomDTO) it.next(); //对象
Label content1 = new Label(0, c, crdto.getRoomname());
Label content2 = new Label(1, c, crdto.getCapicity().toString());
Label content3 = new Label(2, c, crdto.getRoomTypeId().toString());
Label content4 = new Label(3, c, crdto.getRemark());
wsheet.addCell(content1);
wsheet.addCell(content2);
&&& wsheet.addCell(content3);
wsheet.addCell(content4);
wbook.write(); //写入文件
wbook.close();
os.close();
} catch (Exception e) {
throw new ParseException("导出文件出错", 1);
public static void main(String[] args) {
&& File f=new File("F://监测报表.xls");
f.createNewFile();
new outecell().exportClassroom(new FileOutputStream(f));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
用java.lang.Runtime来处理,具体能不能调用excel,word之类的,还没没试过。但是我想应该是可以的!
以下是调用记事本
Runtime rt = Runtime.getRuntime();
rt.exec("cmd.exe /k start notepad");//调用记事本
以下是别人写的调用windows系统工具,http://blog.csdn.net/54powerman/archive//649086.aspx
你可以参考一下,急需分数!!!!!
由于工作中要使用Java调用4U Wma Mp3 Converter命令行将vox格式转换成WMA格式,以方便在网页中试听,所以想到用java.lang.Runtime来处理这个问题。在使用过程中碰到了一些以前没有留意的问题,整理如下:
一 最简单的调用方式
String cmd="WMAMP3Converter.exe";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
总结:此方法,要求可执行文件在Tomcat的工作目录中。一般的,程序安装目录都在Tomcat目录之外,所以使用绝对路径来替代以上方案。
二 使用全路径调用可执行文件
String cmd="C:\\WMA\\WMAMP3Converter.exe";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
总结:此调用方式执行没有问题,后来测试完成后部署到服务器上,发现问题又出来了,程序执行错误。分析原因,因为本地测试和服务器安装路径不同,服务器安装软件的目录为C:\Program Files\4U Computing\WMA MP3 Converter\,这里路径里有空格,造成空格处断开,所以命令行无法正确截取参数。
三 安全的全路径方式调用执行文件
String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
总结:在cmd串中,把可执行文件的全路径用双引号包含,就可以解决路径、文件名中包含空格、全角字符等问题。
程序运行一段时间以后,发现有时候程序执行完后转换文件没有,程序没有错误,而且服务器上有很多进程没有结束。原来调用可执行文件失败了,但是程序不知道,以为成功了,然后继续去找转换后的文件来播放导致失败。分析原因,是因为上面的方式异步的,也就是说java提交运行文件的命令以后,立即转到播放模块。
解决办法就是让命令行同步方式执行,也就是主程序等待调用可执行文件结束以后再执行。(注:当然,播放之前检查文件是否存在也是可以的,这里是说明同步异步的问题。)
四 异步方式调用外部可执行文件
Process process=
String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
process = java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
process.waitFor();
总结:构造一个Process对象,将运行进程获取过来,控制这个进程等待调用结束再继续运行。OK。
五 顺便说一下,使用Process对象以后,可以用如下方法返回错误信息和输出信息,来进一步控制进程运行。
process.exitValue()
process.getErrorStream()
process.getInputStream()
process.getOutputStream()
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/54powerman/archive//649086.aspx
已解决问题
未解决问题Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作,在这篇博客中将为大家介绍两种操作Excel的方式,分别为:jxl和poi。
对于两者的区别网上有测试如下:
测试结果&类型   数据量(行)   执行时间(ms)   执行时间(ms)   执行时间(ms)   平均时间(ms)&POI   1000       579       562       532       558&JXL   1000       500       469       484       484&POI   5000       984       984       969       979&JXL   5000       922       860       890       891&POI   10000      1609      1594      1641       1615&JXL   10000    &   1437      1453      1406       1432&POI   30000      3782      3765      3828       3792&JXL   30000      3922      3906      3922       3917&POI   50000      5953      6484      5859       6099&JXL   50000     &6765      7421      6984       7057&
&在小数据量时jxl快于poi,在大数据量时poi要快于jxl。但差距都不明显。
import java.io.F
import java.io.IOE
import jxl.W
import jxl.write.L
import jxl.write.WritableS
import jxl.write.WritableW
import jxl.write.WriteE
* jxl写Excel
* @author jianggujin
public class JxlWriteDemo
public static void main(String[] args) throws IOException, WriteException
File xlsFile = new File("jxl.xls");
// 创建一个工作簿
WritableWorkbook workbook = Workbook.createWorkbook(xlsFile);
// 创建一个工作表
WritableSheet sheet = workbook.createSheet("sheet1", 0);
for (int row = 0; row & 10; row++)
for (int col = 0; col & 10; col++)
// 向工作表中添加数据
sheet.addCell(new Label(col, row, "data" + row + col));
workbook.write();
workbook.close();
import java.io.F
import java.io.IOE
import jxl.S
import jxl.W
import jxl.read.biff.BiffE
* jxl读excel
* @author jianggujin
public class JxlReadDemo
public static void main(String[] args) throws BiffException, IOException
File xlsFile = new File("jxl.xls");
// 获得工作簿对象
Workbook workbook = Workbook.getWorkbook(xlsFile);
// 获得所有工作表
Sheet[] sheets = workbook.getSheets();
// 遍历工作表
if (sheets != null)
for (Sheet sheet : sheets)
// 获得行数
int rows = sheet.getRows();
// 获得列数
int cols = sheet.getColumns();
// 读取数据
for (int row = 0; row & row++)
for (int col = 0; col & col++)
System.out.printf("%10s", sheet.getCell(col, row)
.getContents());
System.out.println();
workbook.close();
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import org.apache.poi.hssf.usermodel.HSSFR
import org.apache.poi.hssf.usermodel.HSSFS
import org.apache.poi.hssf.usermodel.HSSFW
* Poi写Excel
* @author jianggujin
public class PoiWriteDemo
public static void main(String[] args) throws IOException
// 创建工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = workbook.createSheet("sheet1");
for (int row = 0; row & 10; row++)
HSSFRow rows = sheet.createRow(row);
for (int col = 0; col & 10; col++)
// 向工作表中添加数据
rows.createCell(col).setCellValue("data" + row + col);
File xlsFile = new File("poi.xls");
FileOutputStream xlsStream = new FileOutputStream(xlsFile);
workbook.write(xlsStream);
import java.io.F
import java.io.IOE
import org.apache.poi.openxml4j.exceptions.InvalidFormatE
import org.apache.poi.ss.usermodel.R
import org.apache.poi.ss.usermodel.S
import org.apache.poi.ss.usermodel.W
import org.apache.poi.ss.usermodel.WorkbookF
* Poi写Excel
* @author jianggujin
public class PoiReadDemo
public static void main(String[] args) throws IOException,
InvalidFormatException
File xlsFile = new File("poi.xls");
// 获得工作簿
Workbook workbook = WorkbookFactory.create(xlsFile);
// 获得工作表个数
int sheetCount = workbook.getNumberOfSheets();
// 遍历工作表
for (int i = 0; i & sheetC i++)
Sheet sheet = workbook.getSheetAt(i);
// 获得行数
int rows = sheet.getLastRowNum() + 1;
// 获得列数,先获得一行,在得到改行列数
Row tmp = sheet.getRow(0);
if (tmp == null)
int cols = tmp.getPhysicalNumberOfCells();
// 读取数据
for (int row = 0; row & row++)
Row r = sheet.getRow(row);
for (int col = 0; col & col++)
System.out.printf("%10s", r.getCell(col).getStringCellValue());
System.out.println();
阅读(...) 评论()2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
前台通过form表单上传文件,后台通过request.getInputStream得到流,但是POI建立wordbook要求是fileInputStream,我获取的是servletInputStream,强转会出错。怎么解决。我查的资料都是通过固定文件位置读取流,我想使用用户上传的流来生成workbook该怎么做?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1、有种方案是先保存到服务器某位置再读取,需要注意文件名称唯一 处理完删除 2、不对啊
上传可以得到一个文件 是文件 File对象啊 忘记怎么做的了
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
什么版本的POI?XSSFWorkbook的构造方法里,明明有一个的参数是InputStream啊
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
ServletInputStream extends InputStream当然是强转不了的,你可以把ServletInputStream 从缓冲区读取然后再转换成InputStream(如果你不嫌麻烦的话),正常点的做法还是在服务器建立临时文件(如果你看着不顺可以删掉啊)你可以尝试下使用springmvc做,1.@RequestParam(value="file",required = false)MultipartFile file //接收参数2.但是还要构建文件保存路径
String path = request.getSession(true).getServletContext().getRealPath("/upload");
String fileName = new Date().getTime()+file.getOriginalFilename();
3.保存文件
File targetFile = new File(path,fileName);
file.transferTo(targetFile)
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App

我要回帖

 

随机推荐