用java从0生成一个简单的excel
##目标
用代码实现对一个excel的基础操作,包括创建,插入文字,(好像就这些了),生成的excel可以用wps打开,如果直接用c++的文件流会生成假的xls表格文件,格式不对,所以我们选择开源的poi,正好java练手。
##准备
- ### java开发环境
最基础的java开发环境,前面我有博客里面有讲怎么安装和配置,戳[传送门](https://www.cnblogs.com/Titordong/p/9661440.html),下载好以后记得打开cmd测一下是不是配好了
- ### 开发工具IDEA
IDEA是一款很不错的java开发软件,虽然我没怎么用过,不过用起来真的舒服,而且。。。。我现在也只会用IDEA(记事本除外),IDEA的安装和配置看大佬的博客吧,之前安装时候忘了写博客,戳[传送门](https://blog.csdn.net/miss_yingHao/article/details/78918636),记得第一次启动按照博客上说的把jdk导入,以后就不用手动导入了
- Poi的jar包下载
先看一下官方的poi介绍:
The Apache POI Project's mission is to create and maintain Java APIs for manipulating various file formats based upon the Office Open XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2). In short, you can read and write MS Excel files using Java. In addition, you can read and write MS Word and MS PowerPoint files using Java. Apache POI is your Java Excel solution (for Excel 97-2008). We have a complete API for porting other OOXML and OLE2 formats and welcome others to participate.
反正意思就是,通过poi提供的API你可以用java代码读excel,和写excel,当然也有其他的方法读写excel。首先,打开[poi的下载网址](http://poi.apache.org/download.html)
![](https://i.imgur.com/8uCA9Sw.png)
然后点击如图所示的链接,下载poi的jar包,下载以后解压到一个地方就可以了
##开工
- ###启动IDEA,创建项目,导入jar包到modules
新建hello world项目是这个样子
![](https://i.imgur.com/vTYbhA9.png)
之后依次点击:File -> Projects Structure->Modules,就是这个样子
![](https://i.imgur.com/CFpOtcd.png)
点击如图所示的+号,选择添加JARS or Direction,添加jar包,然后找到你下载的poi包,把名叫poi-4.0.0.jar的文件选中,然后勾选应用到项目中,然后在程序中引入包,`import org.apache.poi.hssf.usermodel.*;`
![](https://i.imgur.com/mtlhcBx.png)
- poi的基础操作
HSSFWorkbook 创建一个操作对象
`HSSFWorkbook wb=new HSSFWorkbook();`
HSSFSheet 在这个操作对象上建立一个表,起个名字
`HSSFSheet sheet=wb.createSheet("值班表");`
HSSFRow 在这个表上的某一行建立一个行操作对象(0代表行数,下面的表格操作参数是列数,可以定位格子)
` HSSFRow row=sheet.createRow(0);`
HSSFCell 在这个行操作对象上建立一个表格操作对象
` HSSFCell cell=row.createCell(0);`
表格上显示一个字符串
`cell.setCellValue(string);`
建立一个文件输出对象,把这个表格真的创建到具体文件,需要import文件输出的包
```
FileOutputStream outputStream=new FileOutputStream("D:\\test值班表.xls");
wb.write(outputStream);
outputStream.close();
```
哈哈哈,知道这么点其实就可以做很多有意思的事情了

样例

自己写了一个把txt格式的文件中数据读取,然后输出到表格中的程序,用到了上面说的所有操作,当然现在会的也就这么一点点了,还蛮好玩的,代码送上:

import org.apache.poi.hssf.usermodel.*;//基础的表格操作
import java.io.*;//屏幕输出和文件输出
import java.util.Calendar;//日历包 public class Main {
public static String [] DayArray;
public static String [] TimeArray;
public static String [][] PerList=new String[6][];
public static void main(String[] args)throws IOException{
Main.ReadFile();
Main.OutputFile();
for(String sting:DayArray){
System.out.println(sting);
}
for(String string:TimeArray){
System.out.println(string);
}
for(int i=0;i<TimeArray.length;i++){
for(int j=0;j<DayArray.length;j++){
if(j!=0)
System.out.print(" ");
System.out.print(PerList[i][j]);
}
System.out.println();
}
}
public static void ReadFile()throws IOException{
InputStream in=new FileInputStream("D:\\排班数据管理\\Basis.txt");
String line;
BufferedReader reader=new BufferedReader(new InputStreamReader(in,"GBK"));
line=reader.readLine();
DayArray =line.split("\\s+");
line=reader.readLine();
TimeArray=line.split("\\s+");
Calendar calendar=Calendar.getInstance();
calendar.set(2018,11,9);
in=new FileInputStream("D:\\排班数据txt\\"+
(calendar.get(calendar.MONTH)+1)+"月"+
calendar.get(calendar.DATE)+ "日数据.txt");
reader=new BufferedReader(new InputStreamReader(in,"GBK"));
reader.readLine();
reader.readLine();
for(int i=0;i<TimeArray.length;i++){
line=reader.readLine();
PerList[i]=line.split("\\s+");
}
reader.close();
}
public static void OutputFile()throws IOException{
HSSFWorkbook wb=new HSSFWorkbook();
HSSFSheet sheet=wb.createSheet("值班表");
HSSFRow row=sheet.createRow(0);
HSSFCell cell;
int index=1;
for(String string:DayArray){
cell=row.createCell(index);
cell.setCellValue(string);
index++;
}
for(int i=0;i<TimeArray.length;i++){
row=sheet.createRow(i+1);
cell=row.createCell(0);
cell.setCellValue(TimeArray[i]);
for(int j=0;j<DayArray.length;j++){
cell=row.createCell(j+1);
cell.setCellValue(PerList[i][j]);
}
}
FileOutputStream outputStream=new FileOutputStream("D:\\test值班表.xls");
wb.write(outputStream);
outputStream.close();
}
}

效果如下:(已打码)

后记

API大法好,用起来真的很舒服了,目前就学了这么一点,更多骚操作大家可以自己网上找找,查POI就可以了,过程中有不理解的欢迎留言讨论哈~

2018/12/12 16:51:27

用java从0生成一个简单的excel的更多相关文章

  1. JAVA代码:生成一个集合,自定义大小,100以内的随机整数

    JAVA代码:生成一个集合,自定义大小,100以内的随机整数 方法一:(Random类) package com.dawa.test; import java.util.ArrayList; impo ...

  2. Java Tread多线程(0)一个简单的多线程实例

    作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多 ...

  3. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  4. 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement

    本blog提供了一个简单的通过JDBC驱动建立JDBC连接例程.并分别通过Statement和PreparedStatement实现对数据库的查询. 在下一篇blog中将重点比較Statement与P ...

  5. OAuth 2.0 的一个简单解释

    OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据. 这个标准比较抽象,使用了很多术语,初学者不容易理解.其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,O ...

  6. VS2017生成一个简单的DLL文件 和 LIB文件——C语言

    下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一 ...

  7. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  8. Extjs6(三)——用extjs6.0写一个简单页面

    本文基于ext-6.0.0 一.关于border布局 在用ext做项目的过程中,最常用到的一种布局就是border布局,现在要写的这个简单页面也是运用border布局来做.border布局将页面分为五 ...

  9. java学习之—实现一个简单的ArrayList

    package thread1; /** * 实现一个简单的ArrayList * * @Title: uminton */ public class SimpleArrayList<T> ...

随机推荐

  1. 第31月第17天 resolveInstanceMethod

    1. #import "UIView+Test.h" #import <objc/runtime.h> @implementation UIView (Test) + ...

  2. js数字串传参时变科学计数法

    例1:onclick=channel_info_listFt(\"'+val.gid+'\",'+val.deviceIdOwner+','+val.gname+') 当长度过长的 ...

  3. Java小程序练习

    1.选择排序法所谓的选择排序,就是把当前数据与它后面所有的数据做个比较,假如满足比较条件,则进行交换操作,直到最后二个数比较完毕,这样重新输出的数据就已经由大到小或者由小到大排好序了.for(int ...

  4. python学习第34天

    # 互斥锁# 进程之间的数据共享 # 关于数据安全的问题# 进程池(自己了解,后面线程部分还会讲) # from multiprocessing import Pool# 线程的概念 (面试的重点)# ...

  5. 射线法(1190 - Sleepwalking )

    题目:http://lightoj.com/volume_showproblem.php?problem=1190 参考链接:https://blog.csdn.net/gkingzheng/arti ...

  6. iOS 仿抖音 视频裁剪

    1.最近做短视频拍摄.其中的裁剪界面要做得和抖音的视频裁剪效果一样 需求:  裁剪有一个最大裁剪时间.最小裁剪时间.左右拖动可以实时查看对应的视频画面.拖动进度条也能查看对应的画面 .拖动底部视图也能 ...

  7. Asp.Net Core 项目搭建基础

    很多新接触ASP.NET Core 技术的同学可能会对项目运行机制不了解,会碰到服务在哪添加?路由在哪配置?中间件怎么使用?依赖注入在哪写?诸如此类的问题.同样作为初学者,以下是本人在学习.Net技术 ...

  8. SQL语句:子查询

    一,子查询定义: 子查询就是嵌套在主查询中的查询. 子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY. 但并不是每个位置嵌套子 ...

  9. 设置mysql数据库为只读

    设置命令: mysql> set global read_only=1;    #1是只读,0是读写 mysql> show global variables like "%re ...

  10. 【运维】在Windows上使用IIS方向代理配置Websocket

    最近在做小程序的项目,微信要求所有数据请求通道都要走https或wss.而我们的项目建设如下: api基于C#的MVC webapi开发. websocket基于Nodejs的thinkjs框架开发. ...