[]
        
首页
开发者学堂
文档
论坛
市场
生态机会
活动
立即试用
(Showing Draft Content)

单元格类型

GcExcel支持Button, CheckBox, ComboBox, 和Hyperlink单元格类型。这些单元格类型定义了单元格中信息的类型及其行为。

可以为单元格,单元格范围,行,列或工作表定义单元格类型。 GcExcel在IRange 接口中定义了getCellType 方法 以获取或设置单元格或单元格范围的单元格类型;如果在一个单元格范围内单元格类型不同,则将返回该范围左上角单元格的单元格类型。IWorksheet 界面上的CellType 属性可用于获取或设置工作表的单元格类型。此外IRange 接口中的EntireColumn和EntireRow属性可分别用于获取或设置列和行的单元格类型。

注意: Excel不支持单元格类型。因此,这些文件在保存到Excel文件后会丢失。但是单元格类型可以与SpreadJS一起很好地使用 ,并且可以在SpreadJS的JSON I / O中保留

按钮(Button)单元格类型

请参考以下代码来创建按钮单元格类型:

private static void ButtonCellTypes() {
    // Initialize workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // Creating ButtonCellType
    ButtonCellType button = new ButtonCellType();
    button.setText("Click Me..!!");
    button.setButtonBackColor("LightBlue");
    button.setMarginLeft(10);
    worksheet.getRange("A1:B2").setCellType(button);

    // Saving workbook to Pdf
    workbook.save("151-ButtonCellTypes.pdf", SaveFileFormat.Pdf);

复选框(CheckBox)单元格类型

请参阅以下代码以创建复选框单元格类型:

private static void CheckBoxCellTypes() {
    // Initialize workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // Creating CheckBoxCellType
    CheckBoxCellType checkBox = new CheckBoxCellType();
    checkBox.setCaption("Caption");
    checkBox.setTextTrue("True");
    checkBox.setTextFalse("False");
    checkBox.setIsThreeState(false);
    worksheet.getRange("A1:C3").setCellType(checkBox);

    worksheet.getRange("A1").setValue(true);
    worksheet.getRange("B2").setValue(true);

    // Saving workbook to Pdf
    workbook.save("152-CheckBoxCellTypes.pdf", SaveFileFormat.Pdf);

组合框(ComboBox)单元格类型

请参阅以下代码以创建组合框单元格类型:

private static void ComboCellTypes() {
    // Initialize workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // Creating ComboBoxCellType
    ComboBoxCellType comboBox = new ComboBoxCellType();
    comboBox.setEditorValueType(EditorValueType.Value);

    ComboBoxCellItem comboItem = new ComboBoxCellItem();
    comboItem.setValue("US");
    comboItem.setText("United States");
    comboBox.getItems().add(comboItem);

    comboItem = new ComboBoxCellItem();
    comboItem.setValue("CN");
    comboItem.setText("China");
    comboBox.getItems().add(comboItem);

    comboItem = new ComboBoxCellItem();
    comboItem.setValue("JP");
    comboItem.setText("Japan");
    comboBox.getItems().add(comboItem);

    worksheet.getRange("A1:B2").setCellType(comboBox);
    worksheet.getRange("A1").setValue("CN");

    // Saving workbook to Pdf
    workbook.save("153-ComboCellTypes.pdf", SaveFileFormat.Pdf);

超链接(Hyperlink)单元格类型

请参阅以下代码以创建超链接单元格类型:

private static void HyperlinkCellTypes() {
    // Initialize workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // Creating HyperLinkCellType
    HyperLinkCellType hyperlinkCell = new HyperLinkCellType();
    hyperlinkCell.setText("GrapeCity Website");
    hyperlinkCell.setLinkColor("Blue");
    hyperlinkCell.setLinkToolTip("GrapeCity Website");
    hyperlinkCell.setVisitedLinkColor("Green");
    hyperlinkCell.setTarget(HyperLinkTargetType.Blank);

    worksheet.getRange("A1").setCellType(hyperlinkCell);
    worksheet.getRange("A1").setValue("https://www.grapecity.com.cn/");

    // Saving workbook to Pdf
    workbook.save("154-HyperlinkCellTypes.pdf", SaveFileFormat.Pdf);

复选框列表或单选按钮列表单元格类型

GcExcel 支持对包含复选框列表和单选按钮列表单元格类型的 SpreadJS 文件进行 JSON 输入输出(I/O)及 PDF 导出操作。您也可以下载包含单选按钮列表和复选框列表单元格类型的 JSON 文件。

checkboxlist_radiobuttonlist.rar


GcExcel 还在其 API 中提供了 RadioButtonListCellType(单选按钮列表单元格类型)和 CheckBoxListCellType(复选框列表单元格类型)类,用于添加这两种单元格类型。


以下示例代码将在 GcExcel 中为某个单元格创建复选框列表单元格类型:

// 创建新的工作簿
Workbook workbook = new Workbook();

IWorksheet worksheet = workbook.getWorksheets().get(0);

CheckBoxListCellType cellType = new CheckBoxListCellType();
cellType.setDirection(CellTypeDirection.Horizontal); // 设置排列方向为水平
cellType.setTextAlign(CellTypeTextAlign.Right); // 设置文本对齐方式为右对齐
cellType.setIsFlowLayout(false); // 禁用流式布局
cellType.setMaxColumnCount(2); // 设置最大列数为2
cellType.setMaxRowCount(1); // 设置最大行数为1
cellType.setHorizontalSpacing(20); // 设置水平间距为20
cellType.setVerticalSpacing(5); // 设置垂直间距为5

// 向复选框列表添加选项(显示文本,值)
cellType.getItems().add(new SelectFieldItem("sample1", "1"));
cellType.getItems().add(new SelectFieldItem("sample2", "2"));
cellType.getItems().add(new SelectFieldItem("sample3", "3"));
cellType.getItems().add(new SelectFieldItem("sample4", "4"));
cellType.getItems().add(new SelectFieldItem("sample5", "5"));

// 设置A1单元格的行高和列宽
worksheet.getRange("A1").setRowHeight(60);
worksheet.getRange("A1").setColumnWidth(25);

// 为A1单元格设置复选框列表单元格类型
worksheet.getRange("A1").setCellType(cellType);
        
// 在复选框列表中勾选多个选项(设置值为"1"、"3"、"5"对应的选项)
worksheet.getRange("A1").setValue(new Object[][]{
{new Object[]{"1", "3", "5"}}
});
        

// 将工作簿保存为PDF文件
workbook.save("AddCheckBoxListCellType.pdf");

以下示例代码将创建复选框列表单元格类型,并将选项的值设置为自定义对象:

// 创建新的工作簿
Workbook workbook = new Workbook();

// 设置工作簿的值JSON序列化器为自定义对象序列化器
Workbook.setValueJsonSerializer(new CustomObjectJsonSerializer());
IWorksheet worksheet = workbook.getWorksheets().get(0);

CheckBoxListCellType cellType = new CheckBoxListCellType();
cellType.setDirection(CellTypeDirection.Horizontal); // 设置排列方向为水平
cellType.setTextAlign(CellTypeTextAlign.Right); // 设置文本对齐方式为右对齐
cellType.setIsFlowLayout(false); // 禁用流式布局
cellType.setMaxColumnCount(2); // 设置最大列数为2
cellType.setMaxRowCount(1); // 设置最大行数为1
cellType.setHorizontalSpacing(20); // 设置水平间距为20
cellType.setVerticalSpacing(5); // 设置垂直间距为5

// 向复选框列表添加选项(显示文本,自定义People对象)
cellType.getItems().add(new SelectFieldItem("player1", new People(5, "Tom")));
cellType.getItems().add(new SelectFieldItem("player2", new People(5, "Jerry")));
cellType.getItems().add(new SelectFieldItem("player3", new People(6, "Mario")));
cellType.getItems().add(new SelectFieldItem("player4", new People(4, "Luigi")));

// 设置A1单元格的行高和列宽
worksheet.getRange("A1").setRowHeight(40);
worksheet.getRange("A1").setColumnWidth(25);

// 为A1单元格设置复选框列表单元格类型
worksheet.getRange("A1").setCellType(cellType);
// 设置A1单元格的值(勾选Tom和Mario对应的选项)
worksheet.getRange("A1").setValue(new Object[][]{
{new Object[]{new People(5, "Tom"), new People(6, "Mario")}}
});
        
// 将工作簿保存为PDF文件
workbook.save("AddCheckBoxListCellTypeCustomObject.pdf");
    
}

// 自定义对象JSON序列化器类,实现IJsonSerializer接口
class CustomObjectJsonSerializer implements IJsonSerializer {
Gson gson = new Gson(); // 创建Gson实例用于JSON序列化/反序列化

// 反序列化方法:将JSON字符串转为对象
public final Object deserialize(String json) {
    return this.gson.fromJson(json, JsonElement.class);
}
    
// 序列化方法:将对象转为JSON字符串
public final String serialize(Object value) {
    return this.gson.toJson(value);
}
}
    
// 自定义People类(包含年龄和姓名属性)
class People {
private int age; // 年龄
private String name; // 姓名
        
// 获取年龄的方法
public int getAge() {
    return age;
}
        
// 设置年龄的方法
public void setAge(int age) {
    this.age = age;
}
        
// 获取姓名的方法
public String getName() {
    return name;
}
        
// 设置姓名的方法
public void setName(String name) {
    this.name = name;
}
        
// 构造方法:初始化年龄和姓名
public People(int age, String name){
    this.age = age;
    this.name = name;
}
        
// 重写equals方法:用于比较两个People对象是否相等
@Override
public boolean equals(Object obj){
    return obj instanceof People && age == ((People)obj).getAge() && name.equals(((People)obj).getName());
}
        
// 重写hashCode方法:用于生成对象的哈希码
@Override
public int hashCode() {
    int hashCode = 17;
    
    hashCode = 31 * hashCode + this.age;
    hashCode = 31 * hashCode + (this.name == null ? 0 : this.name.hashCode());
    
    return hashCode;
}
}

以下示例代码将在 GcExcel 中为某个单元格创建单选按钮列表单元格类型:

// 创建新的工作簿
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);

RadioButtonListCellType cellType = new RadioButtonListCellType();

cellType.setDirection(CellTypeDirection.Horizontal); // 设置排列方向为水平
cellType.setTextAlign(CellTypeTextAlign.Right); // 设置文本对齐方式为右对齐
cellType.setIsFlowLayout(false); // 禁用流式布局
cellType.setMaxColumnCount(2); // 设置最大列数为2
cellType.setMaxRowCount(1); // 设置最大行数为1
cellType.setHorizontalSpacing(20); // 设置水平间距为20
cellType.setVerticalSpacing(5); // 设置垂直间距为5

// 向单选按钮列表添加选项(显示文本,值)
cellType.getItems().add(new SelectFieldItem("sample1", "1"));
cellType.getItems().add(new SelectFieldItem("sample2", "2"));
cellType.getItems().add(new SelectFieldItem("sample3", "3"));
cellType.getItems().add(new SelectFieldItem("sample4", "4"));
cellType.getItems().add(new SelectFieldItem("sample5", "5"));

// 设置A1单元格的行高和列宽
worksheet.getRange("A1").setRowHeight(60);
worksheet.getRange("A1").setColumnWidth(25);

// 为A1单元格设置单选按钮列表单元格类型
worksheet.getRange("A1").setCellType(cellType);
// 设置A1单元格的初始值(选中值为"1"的选项)
worksheet.getRange("A1").setValue("1");
        
// 在单选按钮列表中勾选多个选项(注:单选按钮通常仅支持单选,此处为代码示例)
worksheet.getRange("A1").setValue(new Object[][]{
{
    new Object[]{"1", "3", "5"}}
});
        
// 将工作簿保存为PDF文件
workbook.save("AddRadioListCellType.pdf");

以下示例代码将创建单选按钮列表单元格类型,并将选项的值设置为自定义对象:

// 创建新的工作簿
Workbook workbook = new Workbook();

// 设置工作簿的值JSON序列化器为自定义对象序列化器
Workbook.setValueJsonSerializer(new CustomObjectJsonSerializer());
IWorksheet worksheet = workbook.getWorksheets().get(0);

RadioButtonListCellType cellType = new RadioButtonListCellType();
cellType.setDirection(CellTypeDirection.Horizontal); // 设置排列方向为水平
cellType.setTextAlign(CellTypeTextAlign.Right); // 设置文本对齐方式为右对齐
cellType.setIsFlowLayout(false); // 禁用流式布局
cellType.setMaxColumnCount(2); // 设置最大列数为2
cellType.setMaxRowCount(1); // 设置最大行数为1
cellType.setHorizontalSpacing(20); // 设置水平间距为20
cellType.setVerticalSpacing(5); // 设置垂直间距为5

// 向单选按钮列表添加选项(显示文本,自定义People对象)
cellType.getItems().add(new SelectFieldItem("player1", new People(5, "Tom")));
cellType.getItems().add(new SelectFieldItem("player2", new People(5, "Jerry")));
cellType.getItems().add(new SelectFieldItem("player3", new People(6, "Mario")));
cellType.getItems().add(new SelectFieldItem("player4", new People(4, "Luigi")));

// 设置A1单元格的行高和列宽
worksheet.getRange("A1").setRowHeight(40);
worksheet.getRange("A1").setColumnWidth(25);

// 为A1单元格设置单选按钮列表单元格类型
worksheet.getRange("A1").setCellType(cellType);
// 设置A1单元格的值(选中Mario对应的选项)
worksheet.getRange("A1").setValue(new People(6, "Mario"));

// 将工作簿保存为PDF文件
workbook.save("AddRadioButtonCellTypeCustomObject.pdf");
}
    
// 自定义对象JSON序列化器类,实现IJsonSerializer接口
class CustomObjectJsonSerializer implements IJsonSerializer {
Gson gson = new Gson(); // 创建Gson实例用于JSON序列化/反序列化

// 反序列化方法:将JSON字符串转为对象
public final Object deserialize(String json) {
    return this.gson.fromJson(json, JsonElement.class);
}
    
// 序列化方法:将对象转为JSON字符串
public final String serialize(Object value) {
    return this.gson.toJson(value);
}
}
    
// 自定义People类(包含年龄和姓名属性)
class People {
private int age; // 年龄
private String name; // 姓名
        
// 获取年龄的方法
public int getAge() {
    return age;
}
        
// 设置年龄的方法
public void setAge(int age) {
    this.age = age;
}
        
// 获取姓名的方法
public String getName() {
    return name;
}
        
// 设置姓名的方法
public void setName(String name) {
    this.name = name;
}
        
// 构造方法:初始化年龄和姓名
public People(int age, String name){
    this.age = age;
    this.name = name;
}
    
// 重写equals方法:用于比较两个People对象是否相等
@Override
public boolean equals(Object obj){
    return obj instanceof People && age == ((People)obj).getAge() && name.equals(((People)obj).getName());
}
        
// 重写hashCode方法:用于生成对象的哈希码
@Override
public int hashCode() {
    int hashCode = 17;
    
    hashCode = 31 * hashCode + this.age;
    hashCode = 31 * hashCode + (this.name == null ? 0 : this.name.hashCode());
    
    return hashCode;
}
}

设置复选框、复选框列表和单选按钮列表单元格的大小

GcExcel 在执行 JSON 输入输出(I/O)操作时,支持设置复选框、复选框列表和单选按钮列表单元格的大小。CheckBoxCellType(复选框单元格类型)、CheckBoxListCellType(复选框列表单元格类型)和 RadioButtonListCellType(单选按钮列表单元格类型)类中提供了 setBoxSize 和 setAutoBoxSize 方法:

  • setBoxSize 方法:用于手动设置复选框/单选按钮的大小;

  • setAutoBoxSize 方法:用于启用“框大小随字体大小变化”的功能(启用后,复选框/单选按钮的大小会自动适配字体大小)。

以下示例代码将设置复选框列表单元格的框大小,并将 setAutoBoxSize 方法设为 true(启用自动适配):

// 创建新的工作簿
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
        
CheckBoxListCellType celltype = new CheckBoxListCellType();
celltype.setTextAlign(CellTypeTextAlign.Right); // 设置文本对齐方式为右对齐
celltype.setIsFlowLayout(false); // 禁用流式布局
celltype.setMaxColumnCount(2); // 设置最大列数为2
celltype.setMaxRowCount(1); // 设置最大行数为1
celltype.setHorizontalSpacing(20); // 设置水平间距为20
celltype.setVerticalSpacing(5); // 设置垂直间距为5
celltype.setBoxSize(40); // 设置复选框大小为40
celltype.setAutoBoxSize(true); // 启用“框大小随字体大小变化”
        
// 向复选框列表添加选项(显示文本,值)
celltype.getItems().add(new SelectFieldItem("sample1", "1"));
celltype.getItems().add(new SelectFieldItem("sample2", "2"));
celltype.getItems().add(new SelectFieldItem("sample3", "3"));
celltype.getItems().add(new SelectFieldItem("sample4", "4"));
celltype.getItems().add(new SelectFieldItem("sample5", "5"));
        
// 设置A1:C3单元格区域的列宽
worksheet.getRange("A1:C3").setColumnWidth(25);
// 为A1:C3单元格区域设置复选框列表单元格类型
worksheet.getRange("A1:C3").setCellType(celltype);
// 设置A1:C3单元格区域的值(勾选值为"1"、"3"、"5"对应的选项)
worksheet.getRange("A1:C3").setValue(new Object[][]{
    {new Object[]{"1", "3", "5"}}
});
        
try {
    // 将工作簿导出为JSON文件
    workbook.toJson(new FileOutputStream("checkboxlistsize.json"));
} catch (FileNotFoundException e1) {
    e1.printStackTrace(); // 捕获并打印文件未找到异常
}