# xssfworkbook

# 设置列宽

在使用 XSSFWorkbook 设置 Excel 列宽时,可以通过 Sheet.setColumnWidth() 方法来设置列的宽度。下面是一个示例代码,展示如何使用 Apache POI 库的 XSSFWorkbook 设置 Excel 列宽:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SetColumnWidthExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");
        
        // 设置第一列的宽度(列索引从0开始)
        // 宽度单位是 1/256 个字符宽度的度量值
        sheet.setColumnWidth(0, 20 * 256);  // 设置列宽为20个字符宽度

        // 可以继续设置其他列宽
        sheet.setColumnWidth(1, 30 * 256);  // 第二列宽度为30个字符

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

注意:

  • sheet.setColumnWidth() 方法的第二个参数是以 1/256 个字符宽度为单位。例如,20 * 256 表示将列宽设置为 20 个字符宽度。
  • 如果你希望设置列宽为自动调整内容的宽度,可以使用 sheet.autoSizeColumn(columnIndex) 方法。

你可以根据需求对不同列设置不同的宽度。

# 设置背景色

在使用 Apache POI 设置 Excel 单元格的背景色时,你可以使用 CellStyleXSSFColor 来实现。以下是一个设置单元格背景色的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.awt.Color;

public class SetBackgroundColorExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");
        
        // 创建行
        Row row = sheet.createRow(0);
        
        // 创建单元格
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, World!");

        // 创建单元格样式
        XSSFCellStyle style = workbook.createCellStyle();
        
        // 设置填充模式(单元格的填充方式)
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        
        // 设置背景色(使用 RGB 颜色)
        XSSFColor color = new XSSFColor(new Color(255, 200, 0), null);  // 橙色背景
        style.setFillForegroundColor(color);
        
        // 将样式应用到单元格
        cell.setCellStyle(style);

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 代码解释:

  1. 创建样式 (XSSFCellStyle):使用 workbook.createCellStyle() 创建单元格样式对象。
  2. 设置填充模式 (FillPatternType):使用 FillPatternType.SOLID_FOREGROUND,表示填充整个单元格。
  3. 设置背景颜色 (XSSFColor):通过 XSSFColor 设置颜色,颜色可以使用 java.awt.Color 来定义 RGB 值。
  4. 应用样式:将样式设置到单元格上,使用 cell.setCellStyle(style)

你可以修改 Color(255, 200, 0) 中的 RGB 值来改变背景色。

# 字体加粗

在使用 Apache POI 设置 Excel 单元格字体加粗时,你可以通过 FontCellStyle 来实现。以下是一个示例代码,展示如何设置单元格的字体加粗:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SetBoldFontExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");
        
        // 创建行
        Row row = sheet.createRow(0);
        
        // 创建单元格
        Cell cell = row.createCell(0);
        cell.setCellValue("Bold Text!");

        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        
        // 创建字体对象
        Font font = workbook.createFont();
        
        // 设置字体加粗
        font.setBold(true);
        
        // 将字体应用到样式
        style.setFont(font);
        
        // 将样式应用到单元格
        cell.setCellStyle(style);

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 代码说明:

  1. 创建字体 (Font):通过 workbook.createFont() 创建一个字体对象。
  2. 设置加粗 (setBold(true)):通过 font.setBold(true) 设置字体加粗。
  3. 应用字体到样式 (CellStyle.setFont()):将创建的字体应用到单元格样式。
  4. 设置样式到单元格 (cell.setCellStyle()):最后将样式应用到单元格。

通过这种方式,你可以为特定的单元格设置字体加粗效果。如果需要,你还可以进一步设置字体的其他属性,例如大小、颜色等。

# 设置整行字体加粗

要设置一整行的字体加粗,可以为行中的每个单元格都应用相同的加粗样式。你可以循环遍历行中的所有单元格,并为每个单元格设置加粗的字体样式。下面是一个示例代码,展示如何设置一整行的字体加粗:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SetRowBoldFontExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");

        // 创建行
        Row row = sheet.createRow(0);
        
        // 在行中创建几个单元格并设置它们的值
        row.createCell(0).setCellValue("Header 1");
        row.createCell(1).setCellValue("Header 2");
        row.createCell(2).setCellValue("Header 3");

        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        
        // 创建字体对象,并设置加粗
        Font font = workbook.createFont();
        font.setBold(true);
        
        // 将字体应用到样式
        style.setFont(font);

        // 循环遍历行中的所有单元格,并设置样式
        for (int i = 0; i < row.getLastCellNum(); i++) {
            Cell cell = row.getCell(i);
            if (cell != null) {
                cell.setCellStyle(style);  // 为每个单元格设置加粗的字体样式
            }
        }

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# 代码说明:

  1. 创建加粗的字体样式:通过 font.setBold(true) 设置字体加粗,并将该字体应用到 CellStyle

  2. 遍历行中的单元格:使用 row.getLastCellNum() 获取当前行的最后一个单元格索引,通过循环为行中的每个单元格应用加粗样式。

  3. 确保单元格不为空:在为单元格设置样式之前,确保单元格不为 null,避免空单元格抛出异常。

通过这种方式,你可以方便地为整行的所有单元格设置字体加粗。

# 首行固定

在使用 Apache POI 操作 Excel 时,你可以通过 Sheet.createFreezePane() 方法来冻结(固定)首行。下面是一个示例代码,展示如何冻结 Excel 的首行:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class FreezeFirstRowExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");

        // 冻结首行
        sheet.createFreezePane(0, 1);  // 参数:列索引,行索引(从 1 开始,表示冻结首行)

        // 添加数据到首行
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("Header 1");
        headerRow.createCell(1).setCellValue("Header 2");

        // 添加数据到其他行
        for (int i = 1; i < 10; i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("Data " + i);
            row.createCell(1).setCellValue("More Data " + i);
        }

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 代码说明:

  1. 冻结首行sheet.createFreezePane(0, 1) 用来冻结 Excel 的首行。参数的含义如下:

    • 第一个参数 0 表示冻结的列数(此处为 0,表示不冻结列)。
    • 第二个参数 1 表示冻结的行数,从索引 1 开始,冻结第一行。
  2. 冻结面板的范围:通过设置这两个参数,你可以控制冻结的行和列。例如,sheet.createFreezePane(1, 1) 表示同时冻结第一列和第一行。

通过这种方式,Excel 表格的首行在滚动时会一直保持在顶部,方便查看数据。

# 设置行高

在 Apache POI 中,你可以通过 Row.setHeight() 方法来设置 Excel 行的高度。行高的单位是 "twips"(1/20 点),因此你可以根据需要调整行高。以下是一个示例代码,展示如何设置行高:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SetRowHeightExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");

        // 创建行
        Row row = sheet.createRow(0);
        
        // 设置行高(例如设置为 30 点高度,注意需要乘以 20)
        row.setHeight((short)(30 * 20));  // 30 点的高度

        // 添加数据到行
        row.createCell(0).setCellValue("Hello, World!");

        // 创建其他行,并设置默认行高
        Row anotherRow = sheet.createRow(1);
        anotherRow.setHeight((short)(20 * 20));  // 20 点的高度
        
        anotherRow.createCell(0).setCellValue("Another Row");

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 代码说明:

  1. 设置行高row.setHeight((short)(height * 20)) 用来设置行高,其中 height 是你想要的高度,以点为单位。因为 1 点等于 20 twips,所以需要乘以 20。
  2. 设置默认行高:通过设置不同的行高,你可以调整特定行的显示高度,默认的行高为 15 点。

如果你想要恢复默认的行高,可以使用 row.setHeight((short)-1),这会将行高设置为默认值。

# 设置边框

在 Apache POI 中,设置 Excel 单元格的边框可以通过 CellStyle 对象的边框属性来实现。你可以设置单元格的四个边框(上、下、左、右)的样式和颜色。以下是一个设置单元格边框的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SetCellBorderExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");

        // 创建行
        Row row = sheet.createRow(0);
        
        // 创建单元格
        Cell cell = row.createCell(0);
        cell.setCellValue("Bordered Cell");

        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        
        // 设置边框样式
        style.setBorderTop(BorderStyle.THIN);    // 上边框
        style.setBorderBottom(BorderStyle.THIN); // 下边框
        style.setBorderLeft(BorderStyle.THIN);   // 左边框
        style.setBorderRight(BorderStyle.THIN);  // 右边框

        // 设置边框颜色(这里使用黑色)
        style.setTopBorderColor(IndexedColors.BLACK.getIndex());
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        style.setRightBorderColor(IndexedColors.BLACK.getIndex());

        // 将样式应用到单元格
        cell.setCellStyle(style);

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 代码说明:

  1. 设置边框样式:使用 CellStyle.setBorderTop(), setBorderBottom(), setBorderLeft(), setBorderRight() 来设置四个方向的边框样式。BorderStyle.THIN 是一个常见的细线边框样式,你可以根据需要选择其他样式,例如 BorderStyle.MEDIUM, BorderStyle.DASHED, 等。

  2. 设置边框颜色:使用 setTopBorderColor(), setBottomBorderColor(), setLeftBorderColor(), setRightBorderColor() 方法来设置边框的颜色。这里使用了 IndexedColors.BLACK.getIndex() 来设置边框颜色为黑色,你可以选择其他颜色。

通过这种方式,你可以为单元格设置边框样式和颜色,从而使表格更具可读性和视觉效果。

# 设置居中

在 Apache POI 中,设置单元格内容的水平和垂直居中可以通过 CellStylesetAlignment()setVerticalAlignment() 方法来实现。以下是一个示例代码,展示如何设置单元格内容居中:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SetCellAlignmentExample {
    public static void main(String[] args) {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        
        // 创建工作表
        Sheet sheet = workbook.createSheet("Example Sheet");

        // 创建行
        Row row = sheet.createRow(0);
        
        // 创建单元格
        Cell cell = row.createCell(0);
        cell.setCellValue("Centered Text");

        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        
        // 设置水平居中
        style.setAlignment(HorizontalAlignment.CENTER);
        
        // 设置垂直居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);

        // 将样式应用到单元格
        cell.setCellStyle(style);

        // 调整行高和列宽
        row.setHeight((short) (20 * 20)); // 设置行高
        sheet.setColumnWidth(0, 20 * 256); // 设置列宽

        // 保存Excel文件(这里省略保存逻辑,您可以根据需要保存文件)
        // FileOutputStream out = new FileOutputStream("example.xlsx");
        // workbook.write(out);
        // out.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 代码说明:

  1. 设置水平居中:通过 style.setAlignment(HorizontalAlignment.CENTER) 将单元格的内容水平居中。你还可以设置为 LEFT, RIGHT 等。

  2. 设置垂直居中:通过 style.setVerticalAlignment(VerticalAlignment.CENTER) 将单元格的内容垂直居中。你还可以设置为 TOP, BOTTOM 等。

  3. 行高和列宽调整:为了使单元格内容更美观,示例中还设置了行高和列宽,确保单元格足够大以容纳居中的文本。

通过这种方式,你可以轻松设置单元格内容的居中显示,使表格内容更加整齐。