java代码将excel文件中的内容列表转换成JS文件输出
思路分析
我们想要把excel文件中的内容转为其他形式的文件输出,肯定需要分两步走:
1.把excel文件中的内容读出来;
2.将内容写到新的文件中。
举例
一张excel表中有一个表格:
我们需要将表格中的内容写到JS文件中输出:
文件名为expressData.js
地址的经纬度我们就调用百度接口获得。
新建一个springboot工程
因为使用springboot方便,快捷,所以我们就用springboot来演示,如果还没用过springboot的,并且不知道springboot怎么用的也没关系,你只需要注重代码就行,把这些代码放到以SSM为架构的项目中也是一样的。这里的文件,我们一个一个说。
pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.cetc.excelToJS</groupId>
- <artifactId>cetc_excelToJS</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>cetc_excelToJS</name>
- <url>http://maven.apache.org</url>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.9.RELEASE</version>
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- <!-- <scope>provided</scope> -->
- </dependency>
- <!-- 用于监控spring boot 端点 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
- </dependency>
- <!-- 引入poi,解析workbook视图 -->
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi</artifactId>
- <version>3.16</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>3.14</version>
- </dependency>
- <!-- 处理excel和上面功能是一样的-->
- <dependency>
- <groupId>net.sourceforge.jexcelapi</groupId>
- <artifactId>jxl</artifactId>
- <version>2.6.10</version>
- </dependency>
- </dependencies>
- <!-- 添加spring-boot 的maven插件 -->
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
如果你用ssm写的话,在pom.xml文件中添加
- <!-- 引入poi,解析workbook视图 -->
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi</artifactId>
- <version>3.16</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>3.14</version>
- </dependency>
- <!-- 处理excel和上面功能是一样的-->
- <dependency>
- <groupId>net.sourceforge.jexcelapi</groupId>
- <artifactId>jxl</artifactId>
- <version>2.6.10</version>
- </dependency>
application.yml
这里我们用不到任何配置,所以这个文件我们就放个空的就行了。
Util包
ReadExcel.java
首先,当然是要读到excel中的内容撒。
- package com.cetc.excelToJS.util;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.stereotype.Component;
- import jxl.Sheet;
- import jxl.Workbook;
- import jxl.read.biff.BiffException;
- @Component
- public class ReadExcel {
- public static void main(String[] args) {
- ReadExcel obj = new ReadExcel();
- File file = new File("D:/1234.xls");
- List excelList = obj.readExcel(file);
- System.out.println("list中的数据打印出来");
- for (int i = 0; i < excelList.size(); i++) {
- List list = (List) excelList.get(i);
- for (int j = 0; j < list.size(); j++) {
- System.out.print(list.get(j));
- }
- System.out.println();
- }
- }
- public List<List> getContent(String path) {
- ReadExcel obj = new ReadExcel();
- File file = new File(path);
- List<List> excelList = obj.readExcel(file);
- return excelList;
- }
- // 去读Excel的方法readExcel,该方法的入口参数为一个File对象
- public List readExcel(File file) {
- try {
- // 创建输入流,读取Excel
- InputStream is = new FileInputStream(file.getAbsolutePath());
- // jxl提供的Workbook类
- Workbook wb = Workbook.getWorkbook(is);
- // Excel的页签数量
- int sheet_size = wb.getNumberOfSheets();
- for (int index = 0; index < sheet_size; index++) {
- List<List> outerList=new ArrayList<List>();
- // 每个页签创建一个Sheet对象
- Sheet sheet = wb.getSheet(index);
- // sheet.getRows()返回该页的总行数
- for (int i = 0; i < sheet.getRows(); i++) {
- List innerList=new ArrayList();
- // sheet.getColumns()返回该页的总列数
- for (int j = 0; j < sheet.getColumns(); j++) {
- String cellinfo = sheet.getCell(j, i).getContents();
- if(cellinfo.isEmpty()){
- continue;
- }
- innerList.add(cellinfo);
- System.out.print(cellinfo);
- }
- outerList.add(i, innerList);
- System.out.println();
- }
- return outerList;
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (BiffException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
点击展开
两个方法:
1.getContent(String path) 返回类型<List<List>>
很明显,Controller来调用我,给我一个excel文件的路径,我返回给你文件中的内容,以List<List>的形式。外面这个list是一行一个对象(也就是小list),里面这个list就是一行内容有多个字段,每个字段就是一个对象。
2.readExcel(File file) 返回类型<List<List>>
这是getContent 方法调用的,返回<List<List>>给getContent,就是所有事情都替它干了。注释也很清楚,不用多说了。
TargetInformation.java
这是一个实体类,我们读出了excel文件中的内容,根据需求,我们还要根据地址,查出经纬度,对不对。那我们是不是还要给每个小list对象中加两个值,lng和lat。你可以这样干,但是我是喜欢用对象来处理的,可能有点多余,但你可以不这么干。
- package com.cetc.excelToJS.pojo;
- public class TargetInformation {
- private String lng;
- private String lat;
- private String name;
- private String address;
- public TargetInformation(String lng,String lat,String name,String address) {
- this.lng = lng;
- this.lat = lat;
- this.name = name;
- this.address = address;
- }
- public String getLng() {
- return lng;
- }
- public void setLng(String lng) {
- this.lng = lng;
- }
- public String getLat() {
- return lat;
- }
- public void setLat(String lat) {
- this.lat = lat;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
点击展开
GetLatAndLngByBaidu.java
百度根据地址查询经纬度的方法类,不用说了。有个注意点就是,你传的地址一定要是准确的,存在的。比如:你输入的地址在百度地图上都找不到,或者输入地址点击查询,地图上出来好多个标记,那接口哪知道是哪一个啊?所以,这两种情况是一定会报错的。
- package com.cetc.excelToJS.util;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import org.springframework.stereotype.Component;
- /**
- * 获取经纬度
- *
- * @author Sunny
- * 密钥:lAGGc3PbOv0KeGTWcp6xOtDbkt6Kuld5
- */
- @Component
- public class GetLatAndLngByBaidu {
- /**
- * @param addr
- * 查询的地址
- * @return
- * @throws IOException
- */
- public Object[] getCoordinate(String addr) throws IOException {
- String lng = null;//经度
- String lat = null;//纬度
- String address = null;
- try {
- address = java.net.URLEncoder.encode(addr, "UTF-8");
- }catch (UnsupportedEncodingException e1) {
- e1.printStackTrace();
- }
- // String key = "f247cdb592eb43ebac6ccd27f796e2d2";
- String key = "lAGGc3PbOv0KeGTWcp6xOtDbkt6Kuld5";
- String url = String .format("http://api.map.baidu.com/geocoder?address=%s&output=json&key=%s", address, key);
- URL myURL = null;
- URLConnection httpsConn = null;
- try {
- myURL = new URL(url);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- InputStreamReader insr = null;
- BufferedReader br = null;
- try {
- httpsConn = (URLConnection) myURL.openConnection();// 不使用代理
- if (httpsConn != null) {
- insr = new InputStreamReader( httpsConn.getInputStream(), "UTF-8");
- br = new BufferedReader(insr);
- String data = null;
- int count = 1;
- while((data= br.readLine())!=null){
- if(count==5){
- lng = (String)data.subSequence(data.indexOf(":")+1, data.indexOf(","));//经度
- count++;
- }else if(count==6){
- lat = data.substring(data.indexOf(":")+1);//纬度
- count++;
- }else{
- count++;
- }
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if(insr!=null){
- insr.close();
- }
- if(br!=null){
- br.close();
- }
- }
- return new Object[]{lng,lat};
- }
- public static void main(String[] args) throws IOException {
- GetLatAndLngByBaidu getLatAndLngByBaidu = new GetLatAndLngByBaidu();
- Object[] o = getLatAndLngByBaidu.getCoordinate("无锡市新吴区旺庄路156号宝龙城市广场f2");
- System.out.println(o[0]);//经度
- System.out.println(o[1]);//纬度
- }
- }
点击展开
TargetContent.java
好了,我们现在地址有了,接口也有了。那就查吧,并且查出来封装成对象,把这些对象放到一个新的list中。以备将来所用!
- package com.cetc.excelToJS.util;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Component;
- import com.cetc.excelToJS.pojo.TargetInformation;
- @Component
- public class TargetContent {
- @Resource
- private GetLatAndLngByBaidu getLatAndLngByBaidu;
- public List getTargerList(List<List> excelList) throws IOException {
- List<TargetInformation> resultList= new ArrayList<TargetInformation>();
- for(int i = 1;i<excelList.size();i++) {
- List<String> contentList = (List<String>) excelList.get(i);
- // --------------------------------------------------------
- // --------------这里看一下该条记录的内容先-------------------
- for(int j=0;j<contentList.size();j++) {
- System.out.println(contentList.get(j));
- }
- // --------------------------------------------------------
- // 找出该条记录的地址,调用百度接口,获得经纬度
- Object[] ouject = getLatAndLngByBaidu.getCoordinate(contentList.get(1));
- // 将经纬度封装到对象中存入resultList中
- TargetInformation targetInformation = new TargetInformation(ouject[0].toString(),
- ouject[1].toString(),
- contentList.get(0),
- contentList.get(1));
- resultList.add(targetInformation);
- }
- return resultList;
- }
- }
点击展开
WriteJS.java
获得需要写入的对象集合,那我们就写JS文件呗。
- package com.cetc.excelToJS.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.util.List;
- import org.springframework.stereotype.Component;
- import com.cetc.excelToJS.pojo.TargetInformation;
- @Component
- public class WriteJS {
- // 这里是创建的路径
- private static String path = "D:/";
- private static String filenameTemp;
- // public static void main(String[] args) throws IOException {
- // WriteJS.creatJSFile("你好");
- // WriteJS.writeJSFile("你好");
- // WriteJS.writeJSFile(" 罗大爷1");
- // }
- public String doWrite(List<TargetInformation> resultList) {
- try {
- // 创建一个名为expressData 的js文件
- this.creatJSFile("expressData");
- // 先开个头
- this.writeJSFile("var expPointArr = [");
- for(int i=0;i<resultList.size()-1;i++) {
- TargetInformation targetInformation = resultList.get(i);
- // {"lng":118.752696,"lat":32.22832,"name":"盘城揽投部","address":"新华路121号"},
- String information = "{\"lng\":"+targetInformation.getLng()
- +",\"lat\":"+targetInformation.getLat()
- +",\"name\":\""+targetInformation.getName()
- +"\",\"address\":\""+targetInformation.getAddress()
- +"\"},";
- this.writeJSFile(" "+information);
- }
- // 这里添加最后一条,因为最后一一条后面没逗号
- TargetInformation targetInformation_last = resultList.get(resultList.size()-1);
- String information_last = "{\"lng\":"+targetInformation_last.getLng()
- +",\"lat\":"+targetInformation_last.getLat()
- +",\"name\":\""+targetInformation_last.getName()
- +"\",\"address\":\""+targetInformation_last.getAddress()
- +"\"}";
- this.writeJSFile(" "+information_last);
- // 这里结束
- this.writeJSFile("];");
- return "success";
- }catch (Exception e) {
- return "failure";
- }
- }
- /**
- * 创建文件
- *
- * @throws IOException
- */
- public boolean creatJSFile(String name) throws IOException {
- boolean flag = false;
- filenameTemp = path + name + ".js";
- File filename = new File(filenameTemp);
- if (!filename.exists()) {
- filename.createNewFile();
- flag = true;
- }
- return flag;
- }
- /**
- * 写文件
- *
- * @param newStr
- * 新内容
- * @throws IOException
- */
- public boolean writeJSFile(String newStr) throws IOException {
- // 先读取原有文件内容,然后进行写入操作
- boolean flag = false;
- String filein = newStr + "\r\n";
- String temp = "";
- FileInputStream fis = null;
- InputStreamReader isr = null;
- BufferedReader br = null;
- FileOutputStream fos = null;
- PrintWriter pw = null;
- try {
- // 文件路径
- File file = new File(filenameTemp);
- // 将文件读入输入流
- fis = new FileInputStream(file);
- isr = new InputStreamReader(fis);
- br = new BufferedReader(isr);
- StringBuffer buf = new StringBuffer();
- // 保存该文件原有的内容
- for (int j = 1; (temp = br.readLine()) != null; j++) {
- buf = buf.append(temp);
- // System.getProperty("line.separator")
- // 行与行之间的分隔符 相当于“\n”
- buf = buf.append(System.getProperty("line.separator"));
- }
- buf.append(filein);
- fos = new FileOutputStream(file);
- pw = new PrintWriter(fos);
- pw.write(buf.toString().toCharArray());
- pw.flush();
- flag = true;
- } catch (IOException e1) {
- // TODO 自动生成 catch 块
- throw e1;
- } finally {
- if (pw != null) {
- pw.close();
- }
- if (fos != null) {
- fos.close();
- }
- if (br != null) {
- br.close();
- }
- if (isr != null) {
- isr.close();
- }
- if (fis != null) {
- fis.close();
- }
- }
- return flag;
- }
- }
点击展开
代码很好明白。有两个静态属性说一下:
private static String path = "D:/";
private static String filenameTemp;
第一个:path是即将要生成的JS文件要放的位置。你可以改。
第二个:filenameTemp 是JS的文件名,我是让Controller传的。
createExcel.java
这是一个创建excel的工具类,这里可以忽略。有兴趣的下代码去。
IndexController.java
- package com.cetc.excelToJS.controller;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- import com.cetc.excelToJS.pojo.TargetInformation;
- import com.cetc.excelToJS.util.HandleFile;
- import com.cetc.excelToJS.util.ReadExcel;
- import com.cetc.excelToJS.util.TargetContent;
- import com.cetc.excelToJS.util.WriteJS;
- @RestController
- public class IndexController {
- @Resource
- private ReadExcel readExcel;
- @Resource
- private WriteJS writeJS;
- @Resource
- private TargetContent targetContent;
- @GetMapping("/transfor")
- public String transfor() {
- try {
- String path = "D:/expressData.xls";
- List<List> excelList = readExcel.getContent(path);
- List<TargetInformation> resultList = targetContent.getTargerList(excelList);
- String message = writeJS.doWrite(resultList);
- return message;
- }catch (Exception e) {
- return "操作失败";
- }
- }
- /**
- * excel生成下载
- * @param response
- * @return
- * @throws Exception
- */
- @GetMapping(value = "/createExcel")
- public String createExcel(HttpServletResponse response) throws Exception{
- Map<String,Object> excelMap = new HashMap<>();
- //1.设置Excel表头
- List<String> headerList = new ArrayList<>();
- headerList.add("name");
- headerList.add("address");
- excelMap.put("header",headerList);
- //2.是否需要生成序号,序号从1开始(true-生成序号 false-不生成序)
- boolean isSerial = false;
- excelMap.put("isSerial",isSerial);
- //3.sheet名
- String sheetName = "统计表";
- excelMap.put("sheetName",sheetName);
- //4.需要放入Excel中的数据
- List<String> list = new ArrayList<>();
- list.add("鼓楼投递部");
- list.add("江苏省南京市玄武区韩家巷10-2号");
- List<List<String>> data= new ArrayList<>();
- data.add(list);
- excelMap.put("data",data);
- //Excel文件内容设置
- HSSFWorkbook workbook = HandleFile.createExcel(excelMap);
- String fileName = "expressData.xls";
- //生成excel文件
- HandleFile.buildExcelFile(fileName, workbook);
- //浏览器下载excel
- HandleFile.buildExcelDocument(fileName,workbook,response);
- return "down excel";
- }
- }
点击展开
这个大家不一定一样,只是作为启动这个excel转JS文件功能的...引擎吧。
只要看这个接口就行:
- @GetMapping("/transfor")
- public String transfor() {
- try {
- String path = "D:/expressData.xls";
- List<List> excelList = readExcel.getContent(path);
- List<TargetInformation> resultList = targetContent.getTargerList(excelList);
- String message = writeJS.doWrite(resultList);
- return message;
- }catch (Exception e) {
- return "操作失败";
- }
- }
它是去读D盘根目录下的expressData.xls文件的。然后生成对象list,然后写JS文件,执行完了你会发现D盘多了一个文件
里面的内容嘛,我就不贴了,在上面。
代码下载地址:https://gitee.com/fengyuduke/my_open_resources/blob/master/cetc_excelToJS.zip
到这里本来想结束,但是这里有个问题,大家注意到没?
我是到固定目录下面去找excel文件的,要是用起来肯定多有不便。更多时候我们都是前端上传文件的,然后后台代码来解析读取我们上传的这个文件。那这个时候怎么做?
我们从上到下来修改:
第一步:修改Controller中的接口方法
- @RequestMapping(value="transfor")
- public String transfor(@RequestParam(required = true) MultipartFile file) {
- try {
- // String path = "D:/expressData.xls";
- List<List> excelList = readExcel.getContent(file);
- List<TargetInformation> resultList = targetContent.getTargerList(excelList);
- String message = writeJS.doWrite(resultList);
- return message ;
- }catch (Exception e) {
- return "操作失败";
- }
- }
我们接收前端传来的文件,然后把文件传给工具类。
第二步:修改ReadExcel.java
- package com.project.ndmp.excelToJS;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.commons.fileupload.disk.DiskFileItem;
- import org.springframework.stereotype.Component;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.commons.CommonsMultipartFile;
- import jxl.Sheet;
- import jxl.Workbook;
- import jxl.read.biff.BiffException;
- @Component
- public class ReadExcel {
- public static void main(String[] args) {
- // ReadExcel obj = new ReadExcel();
- // // 此处为我创建Excel路径:E:/zhanhj/studysrc/jxl下
- // File file = new File("D:/1234.xls");
- // List excelList = obj.readExcel(file);
- // System.out.println("list中的数据打印出来");
- // for (int i = 0; i < excelList.size(); i++) {
- // List list = (List) excelList.get(i);
- // for (int j = 0; j < list.size(); j++) {
- // System.out.print(list.get(j));
- // }
- // System.out.println();
- // }
- }
- public List<List> getContent(MultipartFile mFile) {
- ReadExcel obj = new ReadExcel();
- // CommonsMultipartFile cFile = (CommonsMultipartFile) mFile;
- // DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem();
- // InputStream inputStream = fileItem.getInputStream();
- // File file = new File(path);
- List<List> excelList = obj.readExcel(mFile);
- return excelList;
- }
- /**
- *
- * @param mFile MultipartFile
- * @return
- */
- public List readExcel(MultipartFile mFile) {
- try {
- // -------------------------------------------------------------------
- /*
- * 从springmvc获取到的文件是MultipartFile类型的,有的时候不能直接用从这种类型获取
- * 到的inputstream操作一些事情,比如从中初始化poi的Workbook,这时候要怎么获取到File
- * 式的流呢?
- 有一个方法就是把读到的MultipartFile转存到本地,然后再从本地读取这个转存的这个临
- 时文件,从中获取文件流。这么写的话可以达到目的但是听起来就很繁琐对不对。
- 下面这三步,就是通过转换的形式将MultipartFile类型的文件放到输入流里面
- */
- CommonsMultipartFile cFile = (CommonsMultipartFile) mFile;
- DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem();
- InputStream is = fileItem.getInputStream();
- // --------------------------------------------------------------------
- /*
- * 创建输入流,读取Excel
- * 下面这一步不用了,这是文件在本地的情况,根据文件的绝对路径来将文件写到输入流中
- */
- // InputStream is = new FileInputStream(file.getAbsolutePath());
- // jxl提供的Workbook类
- Workbook wb = Workbook.getWorkbook(is);
- // Excel的页签数量
- int sheet_size = wb.getNumberOfSheets();
- for (int index = 0; index < sheet_size; index++) {
- List<List> outerList=new ArrayList<List>();
- // 每个页签创建一个Sheet对象
- Sheet sheet = wb.getSheet(index);
- // sheet.getRows()返回该页的总行数
- for (int i = 0; i < sheet.getRows(); i++) {
- List innerList=new ArrayList();
- // sheet.getColumns()返回该页的总列数
- for (int j = 0; j < sheet.getColumns(); j++) {
- String cellinfo = sheet.getCell(j, i).getContents();
- if(cellinfo.isEmpty()){
- continue;
- }
- innerList.add(cellinfo);
- System.out.print(cellinfo);
- }
- outerList.add(i, innerList);
- System.out.println();
- }
- return outerList;
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (BiffException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
点击展开
这里最为关键的就是这三行代码
- CommonsMultipartFile cFile = (CommonsMultipartFile) mFile;
- DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem();
- InputStream is = fileItem.getInputStream();
这三行代码解决了怎么将MultipartFile类型的文件放到输入流里。这样我们后面的操作都不用变了。
最后
代码中没说的创建excel文件的接口和工具类也很实用。但是我想大家一般都是把模板放到项目里,然后提供下载地址即可,不一定需要代码创建啦!
java代码将excel文件中的内容列表转换成JS文件输出的更多相关文章
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- PHP将多个文件中的内容合并为新的文件
function test() { $hostdir= iconv("utf-8","gbk","C:\Users\原万里\Desktop\日常笔记& ...
- C#读取数据库内容并转换成xml文件
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\bi ...
- xls/csv文件转换成dbf文件
转至:https://blog.csdn.net/linhai1028/article/details/80211252 编写的一个小脚本,主要是利用python中的pandas,xlrd,dbfpy ...
- Java IO把一个文件中的内容以字符串的形式读出来
代码记录(备查): /** * 把一个文件中的内容以字符串的形式读出来 * * @author zhipengs * */ public class FileToString { public sta ...
- 从Excel文件中读取内容
从Excel文件中读取内容 global::System.Web.HttpPostedFileBase file = Request.Files["txtFile"]; strin ...
- 根据Excel文件中的内容,修改指定文件夹下的文件名称
问题:根据Excel文件中内容,把文件名称由第2列,改为第1列.比如:把文件“123.jpg”修改为“1.jpg”.
- 代码实现:定义一个文件输入流,调用read(byte[] b)方法,将a.txt文件中的内容打印出来(byte数组大小限制为5)
package com.loaderman.test; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; im ...
- 在java中读取文件中的内容
package shi; import java.io.*; public class wenjianIO { public static void main(String agrs[]){ File ...
随机推荐
- 面试题:cook和session
1.首先,Cookie与Session存在的目的是什么? 答:二者都是为了保持客户端访问用户与后台服务器的交互状态,之所以为了保持这种状态,一是为了方便一些业务的实现,另一方面就是为了简化后台服务端的 ...
- ubuntu 设置虚拟机和主机在同一网段
一.在VMware中将网络连接方式设置为桥接 1.打开VM菜单栏->Settings 2.在弹出的Virtual Machine Setting对话框中点击Network Adapter,在右边 ...
- Linux cmus
一.简介 CMus 是一款类似于MOC, Herrie 或 mp3blaster 的基于终端的音乐播放器,支持 Ogg Vorbis, FLAC, MP3, WAV, Musepack, WavPac ...
- HTML中meta标签的作用与使用
META标签用来描述一个HTML网页文档的属性 META标签可分为两大部分:HTTP-EQUIV和NAME变量. HTTP实例 HTML代码实例中有一项内容是 <meta http-equiv= ...
- bootstrap导航菜单
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- 国外物联网平台(4):Ayla Networks
国外物联网平台(4)——Ayla Networks 马智 定位 Ayla企业软件解决方案为全球部署互联产品提供强大的工具 功能 Ayla的IoT平台包含3个主要组成部分: (1) Ayla嵌入式代理A ...
- 【转】Android自定义控件(三)——有弹性的ListView
原文地址:http://blog.csdn.net/a105865708/article/details/17959459 上一次我们试验了有弹性的ScrollView.详情 这一次,我们来试验有弹性 ...
- C# 的 Task、Thread、ThreadPool 之间有什么异同?
Thread就是Thread,需要自己调度,适合长跑型的操作. ThreadPool是Thread基础上的一个线程池,目的是减少频繁创建线程的开销.线程很贵,要开新的stack,要增加CPU上下文切换 ...
- angular 样式属性绑定
<button (click)="onClick($event)">点我</button> <input type="> <ta ...
- C#帮助类:Base64
public class Base64 { #region Base64加密 ///<summary> ///Base64加密 ///</summary> ///<par ...