用java从0生成一个简单的excel

用java从0生成一个简单的excel

目标

用代码实现对一个excel的基础操作,包括创建,插入文字,(好像就这些了),生成的excel可以用wps打开,如果直接用c++的文件流会生成假的xls表格文件,格式不对,所以我们选择开源的poi,正好java练手。

准备

  • java开发环境

    最基础的java开发环境,前面我有博客里面有讲怎么安装和配置,戳传送门,下载好以后记得打开cmd测一下是不是配好了
  • 开发工具IDEA

    IDEA是一款很不错的java开发软件,虽然我没怎么用过,不过用起来真的舒服,而且。。。。我现在也只会用IDEA(记事本除外),IDEA的安装和配置看大佬的博客吧,之前安装时候忘了写博客,戳传送门,记得第一次启动按照博客上说的把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的下载网址
    8uCA9Sw.png
    然后点击如图所示的链接,下载poi的jar包,下载以后解压到一个地方就可以了

    开工

  • 启动IDEA,创建项目,导入jar包到modules

    新建hello world项目是这个样子
    vTYbhA9.png
    之后依次点击:File -> Projects Structure->Modules,就是这个样子
    CFpOtcd.png
    点击如图所示的+号,选择添加JARS or Direction,添加jar包,然后找到你下载的poi包,把名叫poi-4.0.0.jar的文件选中,然后勾选应用到项目中,然后在程序中引入包,import org.apache.poi.hssf.usermodel.*;
    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();
    }
}


效果如下:(已打码)
ohc8LX0.png

后记

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

2018/12/12 16:51:27

转载于:https://www.cnblogs.com/Titordong/p/10109316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值