用poi导入excel的xls和xlsx文件

用java代码编程,用poi导入excel的xls和xlsx文件

2个回答

xls和xlsx是新旧版本 你用哪个

xieyuxiamemeda
xieyuxiamemeda xlsx的
接近 4 年之前 回复

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**

  • @author Hongten
  • 参考地址:http://hao0610.iteye.com/blog/1160678
  • */
    public class XlsMain {

    public static void main(String[] args) throws IOException {
    XlsMain xlsMain = new XlsMain();
    XlsDto xls = null;
    List list = xlsMain.readXls();

    try {
        XlsDto2Excel.xlsDto2Excel(list);
    } catch (Exception e) {
        e.printStackTrace();
    }
    for (int i = 0; i < list.size(); i++) {
        xls = (XlsDto) list.get(i);
        System.out.println(xls.getXh() + "    " + xls.getXm() + "    "
                + xls.getYxsmc() + "    " + xls.getKcm() + "    "
                + xls.getCj());
    }
    

    }

    /**

    • 读取xls文件内容
    • @return List对象
    • @throws IOException
    • 输入/输出(i/o)异常 */ private List readXls() throws IOException { InputStream is = new FileInputStream("pldrxkxxmb.xls"); HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); XlsDto xlsDto = null; List list = new ArrayList(); // 循环工作表Sheet for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) { HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet); if (hssfSheet == null) { continue; } // 循环行Row for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { HSSFRow hssfRow = hssfSheet.getRow(rowNum); if (hssfRow == null) { continue; } xlsDto = new XlsDto(); // 循环列Cell // 0学号 1姓名 2学院 3课程名 4 成绩 // for (int cellNum = 0; cellNum <=4; cellNum++) { HSSFCell xh = hssfRow.getCell(0); if (xh == null) { continue; } xlsDto.setXh(getValue(xh)); HSSFCell xm = hssfRow.getCell(1); if (xm == null) { continue; } xlsDto.setXm(getValue(xm)); HSSFCell yxsmc = hssfRow.getCell(2); if (yxsmc == null) { continue; } xlsDto.setYxsmc(getValue(yxsmc)); HSSFCell kcm = hssfRow.getCell(3); if (kcm == null) { continue; } xlsDto.setKcm(getValue(kcm)); HSSFCell cj = hssfRow.getCell(4); if (cj == null) { continue; } xlsDto.setCj(Float.parseFloat(getValue(cj))); list.add(xlsDto); } } return list; }

    /**

    • 得到Excel表中的值
    • @param hssfCell
    • Excel中的每一个格子
    • @return Excel中每一个格子中的值 */ @SuppressWarnings("static-access") private String getValue(HSSFCell hssfCell) { if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { // 返回布尔类型的值 return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { // 返回数值类型的值 return String.valueOf(hssfCell.getNumericCellValue()); } else { // 返回字符串类型的值 return String.valueOf(hssfCell.getStringCellValue()); } }

}

XlsDto2Excel.java类

//该类主要负责向Excel(2003版)中插入数据
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class XlsDto2Excel {

/**
 * 
 * @param xls
 *            XlsDto实体类的一个对象
 * @throws Exception
 *             在导入Excel的过程中抛出异常
 */
public static void xlsDto2Excel(List<XlsDto> xls) throws Exception {
    // 获取总列数
    int CountColumnNum = xls.size();
    // 创建Excel文档
    HSSFWorkbook hwb = new HSSFWorkbook();
    XlsDto xlsDto = null;
    // sheet 对应一个工作页
    HSSFSheet sheet = hwb.createSheet("pldrxkxxmb");
    HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始
    HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
    String[] names = new String[CountColumnNum];
    names[0] = "学号";
    names[1] = "姓名";
    names[2] = "学院";
    names[3] = "课程名";
    names[4] = "成绩";
    for (int j = 0; j < CountColumnNum; j++) {
        firstcell[j] = firstrow.createCell(j);
        firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
    }
    for (int i = 0; i < xls.size(); i++) {
        // 创建一行
        HSSFRow row = sheet.createRow(i + 1);
        // 得到要插入的每一条记录
        xlsDto = xls.get(i);
        for (int colu = 0; colu <= 4; colu++) {
            // 在一行内循环
            HSSFCell xh = row.createCell(0);
            xh.setCellValue(xlsDto.getXh());
            HSSFCell xm = row.createCell(1);
            xm.setCellValue(xlsDto.getXm());
            HSSFCell yxsmc = row.createCell(2);
            yxsmc.setCellValue(xlsDto.getYxsmc());
            HSSFCell kcm = row.createCell(3);
            kcm.setCellValue(xlsDto.getKcm());
            HSSFCell cj = row.createCell(4);
            cj.setCellValue(xlsDto.getCj());

(xlsDto.getMessage());
}
}
// 创建文件输出流,准备输出电子表格
OutputStream out = new FileOutputStream("POI2Excel/pldrxkxxmb.xls");
hwb.write(out);
out.close();
System.out.println("数据库导出成功");
}

}

XlsDto .java类

//该类是一个实体类
public class XlsDto {
/**
* 选课号
/
private Integer xkh;
/
*
* 学号
/
private String xh;
/
*
* 姓名
/
private String xm;
/
*
* 学院
/
private String yxsmc;
/
*
* 课程号
/
private Integer kch;
/
*
* 课程名
/
private String kcm;
/
*
* 成绩
*/
private float cj;
public Integer getXkh() {
return xkh;
}
public void setXkh(Integer xkh) {
this.xkh = xkh;
}
public String getXh() {
return xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getYxsmc() {
return yxsmc;
}
public void setYxsmc(String yxsmc) {
this.yxsmc = yxsmc;
}
public Integer getKch() {
return kch;
}
public void setKch(Integer kch) {
this.kch = kch;
}
public String getKcm() {
return kcm;
}
public void setKcm(String kcm) {
this.kcm = kcm;
}
public float getCj() {
return cj;
}
public void setCj(float cj) {
this.cj = cj;
}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java 导入.xls文件没问题的但是导入.xlsx文件报异常

求指导 org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13] at org.apache.poi.util.PackageHelper.open(PackageHelper.java:41) at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:190) at com.whgj.common.ExcelSheetParser.<init>(ExcelSheetParser.java:38) at com.whgj.business.home.impl.ImportBusiness.excelToJmjbxx(ImportBusiness.java:49) at com.whgj.web.action.ImportAction.import_excel(ImportAction.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:471) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:408) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Unknown Source) Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13] at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:147) at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:596) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:226) at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39) ... 30 more ![图片说明](https://img-ask.csdn.net/upload/201604/29/1461910670_145195.png) ![图片说明](https://img-ask.csdn.net/upload/201604/29/1461910680_565057.png) 在 workbook = new XSSFWorkbook(is);时发生异常

POI 读取几万行左右的xlsx文件如果提高效率?

用 poi 3.8读取一万行(1.4MB)的xlsx要3.2秒,更新到 3.15/3.16 beta2之后,居然变成6秒以上 事实上数据可能有十万行左右,这样光是读取成 workbook就已经一分钟多了

POI 读取Excel文件,导致内存突然增大

## 1、目标 主要实现 替换excel2003与excel2007文件中某些字符,excel文件大概15M,并且包含一些图片。首先需要读取一个excel文件映射表(不包含图片),将该映射表内容读入Map中,然后再读取待替换excel文件,并根据Map中内容替换excel文件中字符串,最后输出处理好的EXCEL文件(包含图片). ## 2、问题描述 1、本机计算机内存24G,JDK8, 在eclispe环境中运行时,可以读取并解析EXCEL映射文件,并按照Map替换目标excel文件中字符串。 2、 但是我用exe4j将项目jar打包成exe文件,在内存为8G的测试计算机上运行时,读取excel映射文件时就会导致内存占用很大,内存占用增长速度很快,瞬间导致计算机内存占满。 3、 exe4j打包使用了本地安装解压的jre包,没有把jdk打包进去。 4、 在本机(24G内存)用eclipse运行和用exe运行时,用jconsole监测了一下,读取excel映射文件时内存占用率不是很高,大概400M左右,最高不会超过1G内存。excel映射文件只有200kb左右。 ## 3 问题 请问这中情况是否与exe4j只打包了jre有关,能否用我本地安装的jre库打包到exe文件中。 为什么在我本机内存不会占满,而在其它测试机上内存过分的高。这个可能与excel文件解析的方法有关,但我不是很明白不同计算机测试效果差别这么大。 ## 4 解析excel相关代码如下 ``` //存储映射表Map,WeakHashMap <String, String> valueMap = new WeakHashMap<>() valueMap.clear(); File savedFile = new File(path); InputStream ins = null; try { ins = new FileInputStream(savedFile); } catch (FileNotFoundException e) { throw new DefException("文件"+path+"不存在",e); } Workbook wb = null; try { wb = WorkbookFactory.create(ins); } catch (InvalidFormatException e) { throw new DefException("文件"+path+"格式错误",e); } catch (IOException e) { throw new DefException("文件"+path+"导入异常",e); } //HSSFWorkbook wb = new HSSFWorkbook(ins); Sheet sheet = null; int sheetNumber = wb.getNumberOfSheets(); for (int i = 0; i < sheetNumber; i++) { sheet = wb.getSheetAt(i); //行数 int lastRowNum = sheet.getPhysicalNumberOfRows(); //读取body for (int rowNum = 1; rowNum < lastRowNum; rowNum++) { //获得当前行 Row row = sheet.getRow(rowNum); //index序列号从0开始,跳过首行,取1 if (row == null) { continue; } Cell oldm = row.getCell(1); if (oldm == null) { continue; } else { oldm.setCellType(HSSFCell.CELL_TYPE_STRING); } Cell newm = row.getCell(3); if (newm == null) { continue; } else { newm.setCellType(HSSFCell.CELL_TYPE_STRING); } String oldValue = oldm.getStringCellValue().toString(); String newValue = newm.getStringCellValue().toString(); if (!"".equals(oldValue) && !"".equals(newValue)) { valueMap.put(oldValue, newValue); } } } try { ins.close(); } catch (IOException e) { throw new DefException("关闭映射文件"+path+"错误",e); } ```

Java利用poi获取excel文件数据出错

读取一般的excel文件是没有问题的,就算碰到excel文件中插入表格的那种,获取数据就报空指针异常,求大神指点!!! 我怀疑是不是是不是读取表格还有接着写方法?错误提示如下: java.lang.NullPointerException at my.core.utils.io.excel.ExcelUtil.readExcel(ExcelUtil.java:120) at test.my.core.utils.io.excel.TestMyCell.testListFiles(TestMyCell.java:48) 而且一异常,我的本地excel文件就打开报错了,数据什么的都没有了

Java通过POI导入WPS格式的Excel

Java通过POI导入WPS格式的Excel???????????????????????

POI读取EXCEL文件的错误(invalid header signature )处理

如题,网上很多说是获取信息头部出错,保存或者另存为就可以,我试了下的确可以,但是我不用保存,只要打开下或者重命名也能读取了,打开也没显示格式错误,更重要的是我功能是读取客户端的excel..不可能每次都手动操作,我现在实现的功能是用jsp的FileUpload上传的临时区用poi存储,有没高手帮忙解决![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/5.gif)更奇怪的是我在eclipse调试却完全没问题,这很重要,已经穷途末路,大家给点意见

poi怎么将Excel中的图片删除??

我需要更新一个Excel,而Poi好像只提供了插入图片的方法(是不是我太菜了没找到??),没有提供删除图片的方法。请问,大神们遇到这类的问题过吗??

POI 如何读取EXcel表,之后如何存入List集合中

FileInputStream fis = new FileInputStream( "E:\\215e_2016-11-28-15-06-00.xls"); HSSFWorkbook wb = new HSSFWorkbook(fis); System.out.println(wb); // 获取整个excel有多少个sheet HSSFSheet sheet = wb.getSheetAt(0); System.out.println(sheet); // 总行数 int rowNum = sheet.getPhysicalNumberOfRows(); System.out.println(rowNum); // 第一行 int sheetCount = wb.getNumberOfSheets(); System.out.println(sheetCount); for (int i = 0; i < sheetCount; i++) { sheet = wb.getSheetAt(i); rowNum = sheet.getPhysicalNumberOfRows(); int cellNum = sheet.getRow(0).getPhysicalNumberOfCells(); for (int j = 0; j < rowNum; j++) { HSSFRow row = sheet.getRow(j); System.out.println(row); for (short k = 0; k < cellNum; k++) { HSSFCell cell = row.getCell(k); System.out.println(cell); if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { System.out.println(cell.getStringCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { System.out.println(cell.getNumericCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { System.out.println(cell.getBooleanCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) { System.out.println("NULL"); } else { System.out.println(cell.getDateCellValue()); } } } } }

关于excel文件导入到mysql数据没有读取到文件问题

<p>  我最近在做一个oa项目,其中有一个excel文件导入到数据中去,用poi做的。我现在在后台能够得到文件的完整路径,但是HSSFWorkbook并没有创建一个工作簿。在网上找了很多资料,并没有找到解决方案,本人是只菜鸟,望各位大侠指路,帮忙看看。谢谢!</p> <p>前台import.jsp代码:</p> <div class="quote_title">写道</div> <div class="quote_div">&lt;%@ page contentType="text/html;charset=GBK"%&gt; <br>&lt;%@ page session="true" %&gt; <br>&lt;%@ page isThreadSafe="true" %&gt; <br>&lt;head&gt; <br><br>&lt;style type="text/css"&gt; <br>&lt;!-- <br>body,td,th { <br>font-size: 12px; <br>} <br>--&gt; <br>&lt;/style&gt; <br>&lt;title&gt;&lt;/title&gt; <br>&lt;/head&gt; <br>&lt;body &gt; <br><br>&lt;script language="javascript"&gt; <br>function add(){ <br>var filePath = document.myform.Urlexcel.value; <br>alert(filePath); <br>myform.action="saveExcel.jsp?filePath="+filePath ; <br>myform.submit(); <br>} <br><br>&lt;/script&gt; <br>&lt;form action="saveExcel.jsp" enctype="multipart/form-data" name="myform" method="post" onSubmit="return check(this)"&gt; <br><br>&lt;p&gt; &lt;/p&gt; <br>&lt;p&gt; &lt;/p&gt; <br>&lt;p&gt; &lt;/p&gt; <br>&lt;table width="80%" border="0" align="center" cellpadding="0" cellspacing="0"&gt; <br>&lt;tr&gt; <br>&lt;td height="50" align="center" valign="middle"&gt; &lt;/td&gt; <br>&lt;td height="50" align="left" valign="middle"&gt; Excel文件: <br>&lt;input name="Urlexcel" type="file" id="Urlexcel" size="41" /&gt;&lt;/td&gt; <br>&lt;td&gt; &lt;/td&gt; <br>&lt;/tr&gt; <br>&lt;tr&gt; <br><br>&lt;td height="50" align="center" valign="middle" colspan="2"&gt; <br>&lt;input type="button" onClick="add();" name="Submit1" value="确认提交" /&gt; <br>         <br>&lt;input type="submit" name="Submit2" value="取消重置" /&gt; <br>&lt;/td&gt; <br>&lt;td&gt; &lt;/td&gt; <br>&lt;/tr&gt; <br>&lt;/table&gt; <br>&lt;/form&gt; <br><br>&lt;/body&gt; <br>&lt;/html&gt;</div> <p> </p> <p>后台saveExcel.jsp代码:</p> <pre name="code" class="java">&lt;%@ page language="java"%&gt; &lt;%@ page session="true"%&gt; &lt;%@ page isThreadSafe="true"%&gt; &lt;%@ page contentType="text/html;charset=GBK"%&gt; &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%&gt; &lt;%@page import="java.io.FileInputStream"%&gt; &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFSheet"%&gt; &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFCell"%&gt; &lt;%@page import="org.apache.poi.hssf.usermodel.HSSFRow"%&gt; &lt;%@page import="java.io.FileNotFoundException"%&gt; &lt;%@page import="java.io.IOException"%&gt; &lt;%@page import="org.apache.poi.poifs.filesystem.POIFSFileSystem"%&gt; &lt;% String filePath = request.getParameter("filePath"); out.println(filePath); try { // 创建对Excel工作簿文件的引用 FileInputStream fis = new FileInputStream(filePath); POIFSFileSystem fs = new POIFSFileSystem(fis); HSSFWorkbook wookbook = new HSSFWorkbook(fs); out.println(wookbook);//此处并没有打印出能容 HSSFSheet sheet = wookbook.getSheet("Sheet1"); // 获取到Excel文件中的所有行数 int rows = sheet.getPhysicalNumberOfRows(); out.println(rows); // 遍历行 for (int i = 0; i &lt; rows; i++) { // 读取左上端单元格? HSSFRow row = sheet.getRow(i); // 行不为空 if (row != null) { // 获取到Excel文件中的所有的列 int cells = row.getPhysicalNumberOfCells(); String value = ""; // 遍历列 for (short j = 0; j &lt; cells; j++) { // 获取到列的值 HSSFCell cell = row.getCell(j); if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_FORMULA: break; case HSSFCell.CELL_TYPE_NUMERIC: value += cell.getNumericCellValue() + ","; break; case HSSFCell.CELL_TYPE_STRING: value += cell.getStringCellValue() + ","; break; default: value += "0"; break; } } } // 将数据插入到mysql数据库中 String[] val = value.split(","); Nsxxb1 entity = new Nsxxb1() ; entity.setGLM(val[0]); entity.setQYMC(val[1]); entity.setXSE1(Double.parseDouble(val[2])); entity.setZZS1(Double.parseDouble(val[3])); entity.setYYS1(Double.parseDouble(val[4])); entity.setXFS1(Double.parseDouble(val[5])); entity.setQYSDS1(Double.parseDouble(val[6])); entity.setGRSDS1(Double.parseDouble(val[7])); entity.setYHS1(Double.parseDouble(val[8])); entity.setTDZZS1(Double.parseDouble(val[9])); entity.setCJS1(Double.parseDouble(val[10])); Nsxxb1Service.insert(entity); } } catch (FileNotFoundException e) { out.println("导入失败"); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } %&gt; </pre> <p> </p>

求助,怎样做Excel大文件上传,解析。

做一个通过jsp上传Excel文档,后台进行解析的功能,项目是struts2,一开始,我是这样写的: jsp: <div id="dlg2" class="easyui-dialog" style="width:400px;height:180px;padding:10px 20px" closed="true" buttons="#dlg-buttons2"> <form id="uploadForm" method="post" enctype="multipart/form-data"> <table style="width:320px;height:80px;"> <tr> <td>下载模版:</td> <td><a href="javascript:void(0)" class="easyui-linkbutton" onclick="downloadTemplate()">下载模板文件</a></td> </tr> <tr> <td>上传文件:</td> <td><input type="file" name="userUploadFile" id="selectedExcel"></td> </tr> </table> </form> </div> <div id="dlg-buttons2"> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="uploadFile()">导入</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg2').dialog('close')">关闭</a> </div> js: function uploadFile(){ debugger; var fileName = $('#selectedExcel').val(); if(fileName == ""){ $.messager.alert('提示','请选择上传文件!','info'); return; } fileext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length); fileext = fileext.toLowerCase(); if (fileext == 'xls' || fileext == 'xlsx'){ $.messager.progress({title:'提示',msg:'正在导入,请稍候...'}); $("#uploadForm").form('submit',{ type : "post", url : "<%=basePath%>" + "ImportAndExport/DataImport.action?selType=" + selType + "&fileext=" + fileext, data : "", dataType : "json", success : function(result){ $.messager.progress("close"); var data = result.split("\""); $.messager.alert('提示',data[1],'info'); }, }); } else{ $.messager.alert('提示','请选择xls/xlsx格式文件!','info'); } } 后台action接收方法: public String upload() throws Exception{ try { HttpServletRequest request = ServletActionContext.getRequest(); String selType = request.getParameter("selType"); String fileext = request.getParameter("fileext"); ImportServiceImpl isi = new ImportServiceImpl(); resultTip = isi.importExcelByType(userUploadFile, selType, fileext); } catch (Exception e) { resultTip = "导入失败!请参考:" + e.getMessage(); e.printStackTrace(); } return "importResult"; } service进行解析: public String importExcelByType(File f,String type,String ext){ Workbook workbook = null; int recordNum = 0;//记录插入记录数 try { if(XLS.equals(ext)){ workbook = new HSSFWorkbook(new FileInputStream(f)); } else if(XLSX.equals(ext)){ workbook = new XSSFWorkbook(new FileInputStream(f)); } Sheet sheet = workbook.getSheetAt(0); 直接用new XSSFWorkbook(new FileInputStream(f))或new HSSFWorkbook方法,获得Workbook对象。 但是,我要解析的Excel文件数据量比较大,一般都是10万条左右,获得Workbook对象的这一步直接内存溢出,拆到一万条一个文件的时候可以跑,但是十分钟很慢,于是上网找了找其他的解析Excel方法,找到了一个号称占用小速度快的,Eclipse跑了有效: [](http://blog.csdn.net/lishengbo/article/details/40711769 "") 我把这个代码拿过来用,加了个返回值List<String[]>的readExcel方法,内容就是: public static List<String[]> readExcel(String f,int columnNum) throws Exception{ // List<String[]> list=XLSXCovertCSVReader.readerExcel("d:\\a.xlsx", "sheet1", 45); List<String[]> list = XLSXCovertCSVReader .readerExcel( // "C:\\Users\\hbkn\\Desktop\\dnbb亳州导入数据\\dnbb亳州\\中压基础数据查询结果\\中压测试.xlsx", "d:\\a.xlsx", "Sheet1", 45); return list; } 然后我高高兴兴拿过来用,修改action方法如下: public String upload() throws Exception{ InputStream is=null; OutputStream os=null; String temp="d:\\a.xlsx"; try { is = new BufferedInputStream(new FileInputStream(userUploadFile)); os = new BufferedOutputStream(new FileOutputStream(temp)); byte[] buffer = new byte[1024]; int len=0; while((len=is.read(buffer))>0){ os.write(buffer,0,len); } HttpServletRequest request = ServletActionContext.getRequest(); String selType = request.getParameter("selType"); String fileext = request.getParameter("fileext"); ImportServiceImpl isi = new ImportServiceImpl(); resultTip = isi.importExcelByType1(temp, selType, fileext); }catch(Exception e){ resultTip= "导入失败!请参考:" + e.getMessage(); e.printStackTrace(); }finally{ if(is !=null){is.close();} if(os!=null){os.close();} } return "importResult"; } 修改service方法如下: public String importExcelByType1(String f,String type,String ext){ try { String[] colArr = getColumnName(type).split(","); HashMap<String, String> colMap = new HashMap<String, String>(); for(int i = 0;i < colArr.length;i++){ colMap.put(colArr[i].split(":")[0], colArr[i].split(":")[1]); } List<String[]> readExcel = XLSXCovertCSVReader.readExcel(f, colArr.length); System.out.println(readExcel.size()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ext; } 发现报: org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'd:\a.xlsx' at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:106) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:221) at com.ssh.effectiveCheck.util.XLSXCovertCSVReader.readerExcel(XLSXCovertCSVReader.java:451) at com.ssh.effectiveCheck.util.XLSXCovertCSVReader.readExcel(XLSXCovertCSVReader.java:480) at com.ssh.effectiveCheck.service.impl.ImportServiceImpl.importExcelByType1(ImportServiceImpl.java:45) at com.ssh.effectiveCheck.action.ImportAction.upload(ImportAction.java:72) 。。。。。 Caused by: java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:219) at java.util.zip.ZipFile.<init>(ZipFile.java:149) at java.util.zip.ZipFile.<init>(ZipFile.java:163) at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipFile(ZipHelper.java:174) at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:104) ... 75 more 但是我手动修改了的解析类里的需要解析的Excel文件路径,不再让它解析我上传后的Excel,而是解析本地的原本的Excel(tomcat服务安装在本地),不报这个错了,list也成功取到了。 也就是说网上找到的这个解析方法不认我上传之后的Excel文件(明明WPS一样可以打开)。 在这个过程中,我又动了歪脑筋,这个服务是单机版,以后部署也是单机,那我能不能不上传,直接让服务解析本地的Excel呢? 所以,各位高手,我想得到解决方案(任一即可), 1。通过jsp获取一个文件的本机绝对路径(我用var fileName = $('#selectedExcel').val();试了,debug显示是fileName = "C:\fakepath\中压测试1.xlsx",这个并不是真实路径)。 2.求正确的上传Excel文件的方法,能让上面链接里代码可以成功解析的那种。 3.Workbook解析Excel大文件的正确姿势,能不能做到分段,占用内存小,速度快的那种。

java POI3.8 Excel 下载 发现不可读取内容 解决办法??

![图片说明](https://img-ask.csdn.net/upload/201701/17/1484635471_937430.png) ![图片说明](https://img-ask.csdn.net/upload/201701/17/1484635688_899413.png) ``` /** * 导出历史记录 */ @SuppressWarnings({ "deprecation", "unchecked" }) @RequestMapping("export-TrainHistoryRecord") @ResponseBody protected void buildExcelDocument(EmployeeTrainHistoryQuery query,ModelMap model, SXSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { //这里使用SXSSFWorkbook对象,支持1048576条数据 try { response.reset(); // 获得国际化语言 RequestContext requestContext = new RequestContext(request); String CourseCompany = requestContext .getMessage("manage-student-trainRecods"); response.setContentType("APPLICATION/vnd.ms-excel;charset=UTF-8"); // 注意,如果去掉下面一行代码中的attachment; 那么也会使IE自动打开文件。 response.setHeader( "Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode( DateUtil.getExportDate() + ".xlsx", "UTF-8"));//Excel 扩展名指定为xlsx SXSSFWorkbook对象只支持xlsx格式 OutputStream os = response.getOutputStream();// new CellStyle style = workbook.createCellStyle(); // 设置样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); String employeeCode = requestContext.getMessage("employeeCode"); String employeeName = requestContext.getMessage("employeeName"); String orgName = requestContext.getMessage("orgName"); String startDate = requestContext.getMessage("start.date"); String endDate = requestContext.getMessage("end.date"); String courseCode = requestContext.getMessage("courseCode"); String courseName = requestContext.getMessage("courseName"); String sessionName = requestContext.getMessage("sessionName"); String hoursNunber = requestContext.getMessage("hoursNunber"); // FileOutputStream(filePath); List<EmployeeTrainHistoryModel> list = null; query.setNeedQueryAll(true); try { // if("0".equals(query.getTrainFlag())){ query.setTotalItem(employeeTrainHistoryService.fetchCountEmployeeTrainHistoryByQuery(query)); int page_size = 100000;// 数据库中存储的数据行数 int list_count =query.getTotalItem(); int export_times = list_count % page_size > 0 ? list_count / page_size + 1 : list_count / page_size; for (int m = 0; m < export_times; m++) { query.setNeedQueryAll(false); query.setPageSize(100000);//每页显示多少条数据 query.setCurrentPage(m+1);//设置第几页 list=employeeTrainHistoryService.getEmployeeTrainHistoryByQuery(query); int len = list.size() < page_size ? list.size() : page_size; //新建sheet Sheet sheet = null; sheet = workbook.createSheet(System.currentTimeMillis() + CourseCompany+m); // for (int n = 0; n < len; n++) { // 迭代数据 if (list != null && list.size() > 0) { int rowNum = 1; int max_row=300000; int sheet_count=0; for (int i = 0; i < list.size(); i++) { EmployeeTrainHistoryModel history=list.get(i); //如果当前行超过单页签可容纳最大行则换页签 // if(i==0||i==(max_row*sheet_count+1)){ sheet.setDefaultColumnWidth((short) 17); // 创建属于上面Sheet的Row,参数0可以是0~65535之间的任何一个, Row header = sheet.createRow(0); // 第0行 // 产生标题列 Cell cell; String[] headerArr = new String[] { employeeCode, employeeName, orgName, startDate, endDate, courseCode, courseName, sessionName, hoursNunber }; for (int j = 0; j < headerArr.length; j++) { cell = header.createCell((short) j); cell.setCellStyle(style); cell.setCellValue(headerArr[j]); } Row row = sheet.createRow(rowNum++); row.createCell((short) 0).setCellValue( history.getEmployeeCode()); row.createCell((short) 1).setCellValue( history.getEmployeeName()); row.createCell((short) 2) .setCellValue(history.getOrgName()); if (history.getTrainBeginTime() != null) { row.createCell((short) 3).setCellValue( DateUtil.toString(history.getTrainBeginTime())); } else { row.createCell((short) 3).setCellValue(""); } if (history.getTrainEndTime() != null) { row.createCell((short) 4).setCellValue( DateUtil.toString(history.getTrainEndTime())); } else { row.createCell((short) 4).setCellValue(""); } row.createCell((short) 5).setCellValue( history.getCourseCode()); row.createCell((short) 6).setCellValue( history.getCourseName()); row.createCell((short) 7).setCellValue( history.getSessionName()); if (history.getHoursNumber() != null) row.createCell((short) 8).setCellValue( history.getHoursNumber().toString()); } } list.clear(); } } catch (Exception e) { e.printStackTrace(); } try { workbook.write(os); model.put("msg", "1"); os.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } ```

POI读取excel的时候,空值不读取的问题,求大神指导

``` private void loadUserInfo(String str2,String filename2) { String uploadFileFileName=str2+filename2; Logger logger = LoggerUtil.getLoggerByName(str2); // 读取刚才上传文件,确保路径相同 // String uploadFileFileName=str1+filename1; System.out.println("11212" + uploadFileFileName); // System.out.println(str1+"+"+filename1); String directory = "/upload"; String targetDirectory = ServletActionContext.getServletContext() .getRealPath(directory); File target = new File(targetDirectory, uploadFileFileName); Workbook wb = null; try { FileInputStream fi = new FileInputStream(target); if (uploadFileFileName.toLowerCase().endsWith("xls")) { wb = new HSSFWorkbook(fi); } else if (uploadFileFileName.toLowerCase().endsWith("xlsx")) { wb = new XSSFWorkbook(fi); } Sheet sheet = wb.getSheetAt(0); int rowNum = sheet.getLastRowNum() + 1; lists = new ArrayList<Muju>(); // i 从1开始表示第一行为标题 不包含在数据中 Muju muju = null; for (int i = 1; i < rowNum; i++) { muju = new Muju(); Row row = sheet.getRow(i); int cellNum = row.getLastCellNum(); for (int j = 0; j < cellNum; j++) { Cell cell = row.getCell(j); String cellValue = null; switch (cell.getCellType()) { // 判断excel单元格内容的格式,并对其进行转换,以便插入数据库 case 0: String s = String.valueOf(cell.getNumericCellValue()); if (s.endsWith(".0")) { cellValue = String.valueOf((int) cell .getNumericCellValue()); } else cellValue = String.valueOf(cell .getNumericCellValue()); break; case 1: cellValue = cell.getStringCellValue();System.out.println("kanka22n="+cellValue); break; case 2: cellValue = String.valueOf(cell.getDateCellValue()); break; case 3: System.out.println("asasas"); cellValue = ""; break; case 4: cellValue = String.valueOf(cell.getBooleanCellValue()); break; case 5: cellValue = String.valueOf(cell.getErrorCellValue()); break; } System.out.println("kanka33n="+cellValue); switch (j) {// 通过列数来判断对应插如的字段 case 0: muju.setVendor(cellValue); break; case 1: muju.setItem(cellValue); break; case 2: muju.setKmcishu(Integer.parseInt(cellValue)); break; case 3: muju.setSycishu(Integer.parseInt(cellValue)); break; case 4: muju.setXianelv(Double.parseDouble(cellValue)); break; case 5: muju.setLjcishu(Integer.parseInt(cellValue)); break; case 6: muju.setFqcishu(Integer.parseInt(cellValue)); break; } } lists.add(muju); } Muju muju2 = null; for (int f = 0; f < lists.size(); f++) { muju2 = lists.get(f); System.out.println(lists); System.out.println(lists.get(f).getVendor()); System.out.println(lists.get(f).getItem()); System.out.println(lists.get(f).getKmcishu()); System.out.println(lists.get(f).getSycishu()); System.out.println(lists.get(f).getXianelv()); System.out.println(lists.get(f).getLjcishu()); System.out.println(lists.get(f).getFqcishu()); Mujudao mjd = new Mujudao(); Muju mj = mjd.itemandvendor(lists.get(f).getVendor(), lists.get(f).getItem()); System.out.println(mj); if (mj == null) { logger.debug(changliang.shibai1(f+1, muju2.getVendor(), muju2.getItem())); } else { int a = mjd.updateitemandvendor(muju2.getVendor(), muju2.getItem(), muju2.getKmcishu(), muju2.getSycishu(), muju2.getXianelv(), muju2.getLjcishu(), muju2.getFqcishu()); if(a==0){ logger.debug(changliang.shibai2(f+1)); } else logger.debug(changliang.chenggong(f+1)); } } } catch (IOException e) { e.printStackTrace(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201608/17/1471415652_612076.png) 如果图片是上图这样,就会出错,空值以后的数据全都不会被导入(下面的代码都不执行了,也没出任何异常) 如果图片是下图这样,却能正常导入 ![图片说明](https://img-ask.csdn.net/upload/201608/17/1471415628_373298.png) 但是,无论如何,我中间的,取空值时候的代码 System.out.println("asasas");都不会执行 求教大神这是怎么回事

poi3.1解析excel的问题

FileInputStream fis = new FileInputStream(file); //file为上传文件的路径 HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(fis)); //报错行 错误信息 org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance at org.apache.poi.hssf.record.RecordFactory.createRecord(RecordFactory.java:191) at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:115) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:205) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:257) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:238) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.apache.poi.hssf.record.RecordFactory.createRecord(RecordFactory.java:179) ... 94 more Caused by: java.lang.ArrayIndexOutOfBoundsException at org.apache.poi.hssf.record.RecordInputStream.checkRecordPosition(RecordInputStream.java:132) at org.apache.poi.hssf.record.RecordInputStream.readByte(RecordInputStream.java:137) at org.apache.poi.hssf.record.HeaderRecord.fillFields(HeaderRecord.java:76) at org.apache.poi.hssf.record.Record.<init>(Record.java:56) at org.apache.poi.hssf.record.HeaderRecord.<init>(HeaderRecord.java:58) ... 99 more

获取第一个excel的单元格的背景(前景)色设置在第二个excel的单元格上

**场景:** 获取第一个excel的单元格的背景(前景)色设置在第二个excel的单元格上。 在调用第一个excel对象的getFillForegroundColor()获取前景色索引后,调用第二个excel对象的setFillForegroundColor()写入获取到的背景色后,发现写出的第二个excel颜色混乱,发现getFillForegroundColor返回的值都是64。(ps:查看官网api发现调用getFillForegroundColor()方法默认是返回64。) **问题:** workbook在获取excel的时候没有把颜色覆盖到FillForegroundColor上么?为什么获取的还是默认值? 请问有什么方法可以更好的获取一个excel中单元格的颜色后在另一个excel中重现这个颜色呢? ps:poi3.9,xls与xlsx两种文件都有

java poi读取excel Workbook类错误

具体问题是报错显示workbook类找不到,但是类已经导入到工程中。烦请大神帮忙看看解决。感谢! 报错信息 ``` 严重: Servlet.service() for servlet [com.oabkdao.servlet.IndexServlet] in context with path [/oabkdao] threw exception [Servlet execution threw an exception] with root cause java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook ``` Servlet调用XlsMain类 ``` XlsMain XlsMain = new XlsMain(); XlsMain.main(null); ``` XlsMain类 ``` package com.oabkdao.io; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class XlsMain { public static void main(String[] args) { readXml("C:\\Users\\SJN\\Desktop\\国内改.xlsx"); System.out.println("-------------"); readXml("C:\\Users\\SJN\\Desktop\\国内改.xlsx"); } public static void readXml(String fileName){ boolean isE2007 = false; //判断是否是excel2007格式 if(fileName.endsWith("xlsx")) {isE2007 = true;} try { InputStream input = new FileInputStream(fileName); //建立输入流 Workbook wb = null; //根据文件格式(2003或者2007)来初始化 if(isE2007) { wb = new XSSFWorkbook(input); } else { wb = new HSSFWorkbook(input);} Sheet sheet = wb.getSheetAt(0); //获得第一个表单 Iterator<Row> rows = sheet.rowIterator(); //获得第一个表单的迭代器 while (rows.hasNext()) { Row row = rows.next(); //获得行数据 System.out.println("Row #" + row.getRowNum()); //获得行号从0开始 Iterator<Cell> cells = row.cellIterator(); //获得第一行的迭代器 while (cells.hasNext()) { Cell cell = cells.next(); System.out.println("Cell #" + cell.getColumnIndex()); switch (cell.getCellType()) { //根据cell中的类型来输出数据 case HSSFCell.CELL_TYPE_NUMERIC: System.out.println(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: System.out.println(cell.getStringCellValue()); break; case HSSFCell.CELL_TYPE_BOOLEAN: System.out.println(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: System.out.println(cell.getCellFormula()); break; default: System.out.println("unsuported sell type"); break; } } } } catch (IOException ex) { ex.printStackTrace(); } } } ```

关于FILE上传EXCEL到JAVA中解析

HTML: ``` <form id="file_form" action="../whiteList/uploadFile" enctype="multipart/form-data" method="post" style="display:none"> <input type="file" id="fileHiden" name="fileHiden" style="display:none" onchange="fileChange()" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/> </form> ``` 前台代码: function fileChange(){ $('#file_form').submit(); } 后台代码: @Controller @RequestMapping("/whiteList") public class WhiteListControll { @RequestMapping("/uploadFile") @ResponseBody public String uploadFile(HttpServletRequest request) { request.getParameter("fileHiden");//没拿到 // TODO return "" } } 问题描述: 我在后台怎么样才能拿到前台过来的FILE? 并且遍历Excel的第一列,Insert到数据库中

javascript开发读取一个excel文件,并且提取里面的表格到数组,用javascpt怎么写?

javascript开发读取一个excel文件,并且提取里面的表格到数组,用javascpt怎么写?

JAVA怎么做点击按钮促发事件弹出浏览窗口选择excel文件读取,并显示到另外一个界面上,请给出主要代码

JAVA怎么做点击按钮促发事件弹出浏览窗口选择excel文件读取,并显示到另外一个界面上?package com.excel; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.swing.JTextArea; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * 解析Excel的类 */ public class ExcelOperate { private JTextArea area; private String fileName; /** * 构造方法传值 * * @param area * 显示Excel内容的位置 * @param fileName * Excel文件名 */ public ExcelOperate(JTextArea area, String fileName) { this.area = area; this.fileName = fileName; } /** * 解析Excel文件 */ public void parseExcel() { File file = new File(fileName); String[][] result = null; try { result = getData(file, 1); } catch (IOException e) { e.printStackTrace(); } int rowLength = result.length; for (int i = 0; i < rowLength; i++) { for (int j = 0; j < result[i].length; j++) { area.append(result[i][j] + "\t\t"); } area.append("\n"); } } /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * * @param file * 读取数据的源Excel * @param ignoreRows * 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打开HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex); // 第一行为标题,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去掉字符串右边的空格 * * @param str * 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); } } ------------------------------------------------------------------------------------------ package com.excel; import java.awt.BorderLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.filechooser.FileNameExtensionFilter; /** * 主界面,按钮响应事件,文本域输出Excel内容 */ public class OpenExcel extends JFrame implements ActionListener { private JButton button; private JScrollPane pane; private JTextArea area; public OpenExcel() { super("解析Excel"); button = new JButton("点我选择Excel文件"); button.addActionListener(this); area = new JTextArea(); pane = new JScrollPane(area); this.add(button, BorderLayout.NORTH); this.add(pane); this.setSize(300, 300); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } // 按钮事件 public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser();// 文件选择对话框 chooser.setAcceptAllFileFilterUsed(false);// 取消所有文件过滤项 chooser.setFileFilter(new FileNameExtensionFilter("Excel文件", "xls"));// 设置只过滤扩展名为.xls的Excel文件 int i = chooser.showOpenDialog(this);// 打开窗口 if (i == JFileChooser.APPROVE_OPTION) { this.setLocation(0, 0); this.setSize(Toolkit.getDefaultToolkit().getScreenSize()); new ExcelOperate(area, chooser.getSelectedFile().getAbsolutePath()) .parseExcel(); } } public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); new OpenExcel(); } }我的代码是这样的,但是界面显示不出来,是什么问题?![图片](https://img-ask.csdn.net/upload/201706/09/1496974828_84401.jpg)

SpringBoot框架实现Excel上传存到List中,大神求教

![图片说明](https://img-ask.csdn.net/upload/201706/01/1496309037_491109.png) ![图片说明](https://img-ask.csdn.net/upload/201706/01/1496308816_58235.png) ![图片说明](https://img-ask.csdn.net/upload/201706/01/1496308830_611820.png) 上面是代码截图,下面的错误截图 ![图片说明](https://img-ask.csdn.net/upload/201706/01/1496309111_704916.png) 有大神求教

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

网上很多的文章和帖子中在介绍秒杀系统时,说是在下单时使用异步削峰来进行一些限流操作,那都是在扯淡! 因为下单操作在整个秒杀系统的流程中属于比较靠后的操作了,限流操作一定要前置处理,在秒杀业务后面的流程中做限流操作是没啥卵用的。

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

Intellij IDEA 美化指南

经常有人问我,你的 IDEA 配色哪里搞的,我会告诉他我自己改的。作为生产力工具,不但要顺手而且更要顺眼。这样才能快乐编码,甚至降低 BUG 率。上次分享了一些 IDEA 有用的插件,反...

【相亲】96年程序员小哥第一次相亲,还没开始就结束了

颜值有点高,条件有点好

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为...

腾讯面试题: 百度搜索为什么那么快?

我还记得去年面腾讯时,面试官最后一个问题是:百度/google的搜索为什么那么快? 这个问题我懵了,我从来没想过,搜素引擎的原理是什么 然后我回答:百度爬取了各个网站的信息,然后进行排序,当输入关键词的时候进行文档比对……巴拉巴拉 面试官:这不是我想要的答案 我内心 这个问题我一直耿耿于怀,终于今天,我把他写出来,以后再问,我直接把这篇文章甩给他!!! 两个字:倒排,将贯穿整篇文章,也是面试官...

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问