【Excel】Apache poi 表格

一、导入maven poi包地址和版本。

如果低版本有 问题 可以适当加大版本。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
        
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.17</version>
</dependency>

 

二、基本代码。

(1)创建工作空间。

HSSFWorkbook workbook = new HSSFWorkbook();

(2)创建sheet页。

一个工作空间可以n(n>0)个sheet页。

//创建一个sheet页面 一个工作空间可以有多个(n+1)个sheet页
HSSFWorkbook workbook = new HSSFWorkbook();
String sheetName1="这是第一个sheet页";
String sheetName2="这是第二个sheet页";
HSSFSheet sheet1 = workbook.createSheet(sheetName1);
HSSFSheet sheet2 = workbook.createSheet(sheetName2);

 

(3)创建行。

一个sheet可以n(n>0)行。

//创建工作空间
HSSFWorkbook workbook = new HSSFWorkbook();

//创建sheet页
String sheetName="这是一个sheet页";//sheet页名称
HSSFSheet sheet=workbook.createSheet(sheetName);

int rowIndex=0;//需要创建行的索引 注意行索引从 0 开始
//创建行
HSSFRow row=sheet.createRow(rowIndex);

//获取已创建的行
row=sheet.getRow(rowIndex);

(4)创建单元格。

一行可以n(n>0)个单元格。

//创建工作空间
HSSFWorkbook workbook = new HSSFWorkbook();

//创建sheet页
String sheetName="这是一个sheet页";//sheet页名称
HSSFSheet sheet=workbook.createSheet(sheetName);

int rowIndex=0;//行索引 注意行索引从 0 开始
//创建行
HSSFRow row=sheet.createRow(rowIndex);

//创建单元格
int columnIndex=0;//列索引 注意行索引从 0 开始
HSSFCell cell=row.createCell(columnIndex);
//给单元格赋值
String cellValue="这是一个单元格";
cell.setCellValue(cellValue);

//获取单元格
cell=row.getCell(columnIndex)

//在sheet里增加合并单元格
//rowIndex1 合并开始行,rowIndex2合并结束行,columnIndex1 合并开始列,columnIndex2 合并结束列
int rowIndex1,rowIndex2,columnIndex1,columnIndex2;
sheet.addMergedRegion(new CellRangeAddress(rowIndex1, rowIndex2, columnIndex1, columnIndex2));

(5)创建样式。

//创建样式
HSSFCellStyle style = workbook.createCellStyle();

//常用的样式设置
//1.设置背景色 
style.setFillForegroundColor((short) colorIndex);
//设置背景色需要搭配这个属性来使用
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

//2.设置字体样式
//创建字体
HSSFFont font = workbook.createFont();
font.setFontName("宋体");//字体
short fontSize=18;
font.setFontHeightInPoints(fontSize);// 字体大小
short colorIndex=1;
font.setColor(colorIndex);//字体颜色
style.setFont(font);

//3.设置字体水平位置
int centerAddr=2;
style.setAlignment(HorizontalAlignment.forInt(centerAddr));  // 左右居中2 居右3 默认居左

//4.设置字体垂直位置
style.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中1

//5.设置样式边框的大小
style.setBorderRight(BorderStyle.valueOf((short) 2));//右
style.setBorderLeft(BorderStyle.valueOf((short) 2));//左
style.setBorderBottom(BorderStyle.valueOf((short) 2));//下
style.setBorderTop(BorderStyle.valueOf((short) 2));//上

short borderColorIndex=1;
style.setBottomBorderColor(borderColorIndex);//下的边框颜色设置
//设置样式是否设置为锁定 锁定后  在后续的样式操作中就不会将样式去除
style.setLocked(true);

 

三、测试类

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

//创建一个sheet页面 一个工作空间可以有多个(n+1)个sheet页
HSSFWorkbook workbook = new HSSFWorkbook();
String sheetName1="这是第一个sheet页";
String sheetName2="这是第二个sheet页";
HSSFSheet sheet1 = workbook.createSheet(sheetName1);
HSSFSheet sheet2 = workbook.createSheet(sheetName2);

workbook.write(byteArrayOutputStream);
byte[] bytes = byteArrayOutputStream.toByteArray();
InputStream input  = new ByteArrayInputStream(bytes);

File f = new File("E:\\excel.xls");
if (f.exists()){
   f.delete();
}
f.createNewFile();
FileOutputStream out = new FileOutputStream(f);
HSSFWorkbook book = new HSSFWorkbook(input);
book.write(out);
out.flush();
out.close();

 

四、工具类

public class Excel {

    private final HSSFWorkbook workbook=new HSSFWorkbook();

    /**
     * 创建行元素
     * @param style    样式
     * @param height   行高
     * @param value    行显示的内容
     * @param row1     起始行
     * @param row2     结束行
     * @param col1     起始列
     * @param col2     结束列
     */
    private void createRow(HSSFCellStyle style, int height, String value, int row1, int row2, int col1, int col2){
        //设置从第row1行合并到第row2行,第col1列合并到col2列
        //至少得合并两个或以上的单元格
        sheet.addMergedRegion(new CellRangeAddress(row1, row2, col1, col2));  
        HSSFRow rows = sheet.createRow(row1);        //设置第几行
        rows.setHeight((short) height);              //设置行高
        HSSFCell cell = rows.createCell(col1);       //设置内容开始的列
        cell.setCellStyle(style);                    //设置样式
        cell.setCellValue(value);                    //设置该行的值
    }

    /**
     * 创建样式
     * @param fontSize   字体大小
     * @param align  水平位置  左右居中2 居右3 默认居左 垂直均为居中
     * @param bold   是否加粗
     * @return
     */
    private HSSFCellStyle getStyle(int fontSize,int align,boolean bold,boolean border){
        HSSFFont font = workbook.createFont();
        font.setFontName("宋体");
        font.setFontHeightInPoints((short) fontSize);// 字体大小
        HSSFCellStyle style = workbook.createCellStyle();
        style.setFont(font);                         //设置字体
        style.setAlignment(HorizontalAlignment.forInt((short) align));          // 左右居中2 居右3 默认居左
        style.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中1

        if (border){
            style.setBorderRight(BorderStyle.valueOf((short) 2));
            style.setBorderLeft(BorderStyle.valueOf((short) 2));
            style.setBorderBottom(BorderStyle.valueOf((short) 2));
            style.setBorderTop(BorderStyle.valueOf((short) 2));

            style.setLocked(true);
        }
        return style;
    }

    /**
     * sheetName sheet页名称
     * 创建一个sheet页
     * return sheet
     */
    public HSSFSheet createSheet(String sheetName){
        return workbook.createSheet(sheetName);
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园共享单车调度问题是指如何合理分配有限数量的共享单车到校园内的不同区域,以满足学生和教职工的出行需求。 首先,我们可以使用matlab来建立一个模型,将校园划分为若干个区域,每个区域可以表示为一个节点。然后,根据历史数据和实时数据,可以利用matlab进行数据分析和处理,例如根据时间和地点对共享单车的需求进行预测。 其次,根据单车的位置与目的地之间的距离,我们可以使用matlab中的距离计算函数,例如pdist2,来计算所有节点之间的距离,并建立一个邻接矩阵来表示各节点之间的距离。 接下来,我们可以使用基于优化算法的方法来解决调度问题。例如,我们可以考虑使用matlab中的遗传算法、模拟退火算法或粒子群优化算法等进行优化。这些算法可以通过最小化目标函数或最大化效用函数,来寻找最优的共享单车调度方案。 最后,我们可以利用matlab进行仿真实验,通过模拟不同场景下的共享单车调度方案并对比它们的效果,选出最佳方案。同时,可以通过可视化工具如matlab中的地图绘制函数,将最优方案在地图上显示,以便调度员或使用者更直观地了解单车的分布情况。 综上所述,利用matlab可以对校园共享单车调度问题进行建模、数据分析、优化算法求解和仿真实验。这对于在有限资源下实现校园内共享单车的合理调度具有重要的实际意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值