[]
GcExcel支持Button, CheckBox, ComboBox, 和Hyperlink单元格类型。这些单元格类型定义了单元格中信息的类型及其行为。
可以为单元格,单元格范围,行,列或工作表定义单元格类型。 GcExcel在IRange 接口中定义了getCellType 方法 以获取或设置单元格或单元格范围的单元格类型;如果在一个单元格范围内单元格类型不同,则将返回该范围左上角单元格的单元格类型。IWorksheet 界面上的CellType 属性可用于获取或设置工作表的单元格类型。此外IRange 接口中的EntireColumn和EntireRow属性可分别用于获取或设置列和行的单元格类型。
注意: Excel不支持单元格类型。因此,这些文件在保存到Excel文件后会丢失。但是单元格类型可以与SpreadJS一起很好地使用 ,并且可以在SpreadJS的JSON I / O中保留
请参考以下代码来创建按钮单元格类型:
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);请参阅以下代码以创建复选框单元格类型:
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);请参阅以下代码以创建组合框单元格类型:
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);请参阅以下代码以创建超链接单元格类型:
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(); // 捕获并打印文件未找到异常
}