📜  如何使用Java对电子表格中的单元格应用不同的样式?

📅  最后修改于: 2022-05-13 01:54:48.226000             🧑  作者: Mango

如何使用Java对电子表格中的单元格应用不同的样式?

Apache POI 是一个强大的 API,它使用户能够使用Java程序创建、操作和显示基于 Microsoft Office 的各种文件格式。使用 POI,您应该能够对以下文件格式执行创建、修改和显示/读取操作。例如, Java不提供处理 Excel 文件的内置支持,因此我们需要为这项工作寻找开源 API。它是由 Apache Software Foundation 开发和分发的开源库,用于使用Java程序设计或修改 Microsoft Office 文件。它包含将用户输入数据或文件解码为 MS Office 文档的类和方法。在这里,可以在Java程序中使用此概念将不同的样式(如字体、颜色、单元格合并、对齐方式等)应用于 Excel 中的单元格。

Apache POI 架构:它由构成架构以形成工作系统的各种组件组成:

  • POIFS(Poor Obfuscation Implementation File System):该组件是所有其他 POI 元素的基本因素。它用于显式读取不同的文件。
  • HSSF(Horrible Spreadsheet Format):用于读写xls格式的MS-Excel文件。
  • XSSF (XML Spreadsheet Format):用于 MS-Excel 的 xlsx 文件格式。
  • HPSF (Horrible Property Set Format):用于提取 MS-Office 文件的属性集。
  • HWPF (Horrible Word Processor Format):用于读写 MS-Word 的 doc 扩展文件。
  • XWPF(XML Word Processor Format):用于读写 MS-Word 的 Docx 扩展文件。
  • HSLF(可怕的幻灯片布局格式):用于阅读、创建和编辑 PowerPoint 演示文稿。
  • HDGF(可怕的图表格式):它包含 MS-Visio 二进制文件的类和方法。
  • HPBF (Horrible Publisher Format):用于读写 MS-Publisher 文件。

Jar 文件是包含一个或多个Java类文件的 Zip 存档。这使得库的使用更加方便。目录和 Jar 文件被添加到构建路径中,并且在运行时可供 ClassLoader 使用以查找其中的特定类。我们通常使用 .jar 文件以Java类文件和相关元数据和资源(文本、图像等)的形式分发Java应用程序或库。

方法:

  • 第 1 步:导入必要的 .jar 文件,如 HSSF、XML,并将它们添加到您的构建路径中。
  • 第 2 步:使用“new XSSFWorkbook()”创建工作簿,我们必须在其中使用“workbook.createSheet('Sheet1')”创建电子表格或 Excel 文件,我们将在其中应用不同的样式。

  • 第 3 步:应用样式,这里使用命令电子表格.addMergedRegion 合并单元格。我们必须提供行和列的范围地址及其参数。
  • 第 4 步:现在确定单元格对齐方式的下一个样式。为此,我们有两个命令
    • “style1.setAlignment(XSSFCellStyle.ALIGN_LEFT)”用于确定对齐和
    • “style1.setVerticalAlignment(XSSFCellStyle.VERTICAL_TOP)”用于确定垂直对齐方式
  • 第 5 步:对于单元格应用边框,我们可以使用“setBorderBottom/Left/Top/Right(XSSFCleeName.BorderName)”。
  • 第六步:更改参数中的边框名称,可以通过不同的边框样式。
  • 第七步:对于填充颜色和添加图案,首先使用“setFillBackgroundColor(HSSFColor.COLOR_NAME.index)”设置单元格的背景颜色。
  • 步骤8:然后通过“setFillPattern(XSSFCellStyle.PATTERN_NAME)”设置您喜欢的模式。
  • 第九步:最后,使用”setAlignment(XSSFCellStyle.ALIGN_TYPE);设置对齐方式;

实现:对已创建的本地目录下的空Excel文件执行上述程序步骤。

  1. 通过创建 XSSFSheet 对象来创建电子表格
  2. 使用createRow()方法在上述 XSSFSheet 中创建一行。
    • 稍后,设置行高
  3. 创建一个类型为 XSSFCell 的对象并在创建的行上方对它进行类型转换。
  4. 设置单元格值。
  5. 合并单元格。
  6. 对齐单元格。
  7. 对齐对齐。
  8. 与单元格接壤。
  9. 在单元格中填充颜色。
  10. 通过创建 FileOutputStream 对象在本地目录中创建一个新文件。
  11. 写入在初始步骤中创建的上述工作簿。
  12. 关闭文件的连接。

例子:

Java
// Java Program to apply different styles
// to a cell in a spreadsheet
 
// Importing java input/output classes
import java.io.File;
import java.io.FileOutputStream;
// Importing Apache POI modules
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
// Class- for styling cells
public class GFG {
 
    // Main driver method
    public static void main(String[] args) throws Exception
    {
 
        // Create a Work Book
        XSSFWorkbook workbook = new XSSFWorkbook();
 
        // Step 1: Create a Spread Sheet by
        // creating an object of XSSFSheet
        XSSFSheet spreadsheet
            = workbook.createSheet("Sheet1");
 
        // Step 2(a): Creating a row in above XSSFSheet
        // using createRow() method
        XSSFRow row = spreadsheet.createRow((short)1);
 
        // Step 2(b): Setting height of a row
        row.setHeight((short)800);
 
        // Step 3: Creating an object of type XSSFCell and
        // typecasting above row created to it
        XSSFCell cell = (XSSFCell)row.createCell((short)1);
 
        // Step 4: Setting cell values
        cell.setCellValue("Merged cells");
 
        // Step 5: MERGING CELLS
        // This statement for merging cells
 
        spreadsheet.addMergedRegion(new CellRangeAddress(
            1, // first row (0-based)
            1, // last row (0-based)
            1, // first column (0-based)
            4 // last column (0-based)
            ));
 
        // Step 6: CELL Alignment
        row = spreadsheet.createRow(5);
 
        cell = (XSSFCell)row.createCell(0);
        row.setHeight((short)800);
 
        // 6(a) Top Left alignment
        XSSFCellStyle style1 = workbook.createCellStyle();
 
        spreadsheet.setColumnWidth(0, 8000);
        style1.setAlignment(XSSFCellStyle.ALIGN_LEFT);
        style1.setVerticalAlignment(
            XSSFCellStyle.VERTICAL_TOP);
 
        cell.setCellValue("Hi, I'm top left indent");
        cell.setCellStyle(style1);
        row = spreadsheet.createRow(6);
        cell = (XSSFCell)row.createCell(1);
        row.setHeight((short)800);
 
        // 6(b) Center Align Cell Contents
        XSSFCellStyle style2 = workbook.createCellStyle();
 
        style2.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        style2.setVerticalAlignment(
            XSSFCellStyle.VERTICAL_CENTER);
        cell.setCellValue("I'm Center Aligned indent");
        cell.setCellStyle(style2);
        row = spreadsheet.createRow(7);
        cell = (XSSFCell)row.createCell(2);
        row.setHeight((short)800);
 
        // 6(c) Bottom Right alignment
        XSSFCellStyle style3 = workbook.createCellStyle();
 
        style3.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
        style3.setVerticalAlignment(
            XSSFCellStyle.VERTICAL_BOTTOM);
        cell.setCellValue("I'm Bottom Right indent");
        cell.setCellStyle(style3);
        row = spreadsheet.createRow(8);
        cell = (XSSFCell)row.createCell(3);
 
        // Step 7: Justifying Alignment
        XSSFCellStyle style4 = workbook.createCellStyle();
 
        style4.setAlignment(XSSFCellStyle.ALIGN_JUSTIFY);
        style4.setVerticalAlignment(
            XSSFCellStyle.VERTICAL_JUSTIFY);
        cell.setCellValue(
            "I'm Justify indent nice to meet you");
        cell.setCellStyle(style4);
 
        // Step 8: CELL BORDER
        row = spreadsheet.createRow((short)10);
 
        row.setHeight((short)800);
        cell = (XSSFCell)row.createCell((short)1);
        cell.setCellValue("BORDER");
        XSSFCellStyle style5 = workbook.createCellStyle();
 
        style5.setBorderBottom(XSSFCellStyle.BORDER_THICK);
        style5.setBottomBorderColor(
            IndexedColors.BLUE.getIndex());
        style5.setBorderLeft(XSSFCellStyle.BORDER_DOUBLE);
        style5.setLeftBorderColor(
            IndexedColors.GREEN.getIndex());
        style5.setBorderRight(XSSFCellStyle.BORDER_HAIR);
        style5.setRightBorderColor(
            IndexedColors.RED.getIndex());
        style5.setBorderTop(XSSFCellStyle.BIG_SPOTS);
        style5.setTopBorderColor(
            IndexedColors.Black.getIndex());
        cell.setCellStyle(style5);
 
        // Step 9: Fill Colors
 
        // 9(a) Background color
        row = spreadsheet.createRow((short)10);
 
        cell = (XSSFCell)row.createCell((short)1);
        XSSFCellStyle style6 = workbook.createCellStyle();
 
        style6.setFillBackgroundColor(HSSFColor.BLUE.index);
        style6.setFillPattern(
            XSSFCellStyle.FILL_HORIZONTAL_CROSS_HATCH);
        style6.setAlignment(XSSFCellStyle.ALIGN_FILL);
 
        spreadsheet.setColumnWidth(1, 8000);
        cell.setCellValue("FILL HORIZONTAL CROSS HATCH");
        cell.setCellStyle(style6);
 
        // 9(b) Foreground color
        row = spreadsheet.createRow((short)12);
 
        cell = (XSSFCell)row.createCell((short)1);
        XSSFCellStyle style7 = workbook.createCellStyle();
        style7.setFillForegroundColor(
            HSSFColor.GREEN.index);
        style7.setFillPattern(
            XSSFCellStyle.THIN_VERTICAL_STRIPE);
        style7.setAlignment(XSSFCellStyle.ALIGN_FILL);
 
        cell.setCellValue("THIN VERTICAL STRIPE");
        cell.setCellStyle(style7);
 
        // Step 10: Creating a new file in the local
        // directory by creating object of FileOutputStream
        FileOutputStream out = new FileOutputStream(
            new File("C:/poiexcel/stlingcells.xlsx"));
 
        // Step 11: Write to above workbook created in
        // initial step
        workbook.write(out);
 
        // Step 12: Close the file connection
        out.close();
 
        // Display message for console window when
        // program is successfully executed
        System.out.println("gfg.xlsx success");
    }
}


输出