jxl 做的报表通用方法
ExcelUtilToolTest.javapackage com.sobey.pms.util.excel;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import junit.framework.TestCase;/** * <p>Title: TestExcelUtilTool.java</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2009 Sobey,Inc</p> * <p>Company: Sobey.Inc</p> * @author yaobo 2010-8-9 * @version 1.0 */public class ExcelUtilToolTest extends TestCase{public void testCreateExcel(){List datas = new ArrayList();for (int i = 0; i < 10; i++){Data data = new Data("名字" + i, "地址" + i, "公司" + i);datas.add(data);}ExcelExportInfo info=null; String footer[][]=new String; footer=""; //footer 是文本内容,footer为文本占的列数 footer="3"; info = new ExcelExportInfo(); info.setColumnHeader("名字, 地址, 公司"); info.setDatas(datas); //list (是po\vo) info.setFeilds("name,address,company"); // list 集合中对象的feilds info.setTitle("人员信息"); //设置title,如果为空则excel无标题 info.setFooter(footer); // footer info.setWidth(new int[]{50, 50, 50}); // int数组为int类型, 为null 取默认宽度20, ExcelUtilTool util=new ExcelUtilTool(); ByteArrayOutputStreamtt = util.writeExcelStream(info); try{ FileOutputStream pos = new FileOutputStream("c:/test.xls"); pos.write(tt.toByteArray()); tt.close(); pos.close(); }catch (Exception ex){ assert(false); ex.printStackTrace(); } assert(true);}}class Data{String name;String address;String company;public Data(String name, String address, String company) {super();this.name = name;this.address = address;this.company = company;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}}ExcelUtilTool.java
package com.sobey.pms.util.excel;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.Colour;import jxl.read.biff.BiffException;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;import org.apache.log4j.Logger;import com.sobey.esda.utils.ReflectionUtils;/** ** 通用Excel处理类 ***/public class ExcelUtilTool {/** * Logger for this class */private static final Logger logger = Logger.getLogger(ExcelUtilTool.class);/** * 得到 Excel 报表数据的字节 ** @param reportTitle * 报表的标题 ** @param dataInArr * String[][] 输入的待显示数据数组 * @param param_width * int[] 每列列宽 ** @param columnHeader * 列头标题 ** @param columnFooter * 脚眉 =数据,=表示占有宽度 为 1,2,3,.. ** @param report_format * String[] 报表显示 格式数组{"","",""} * @throws Exception */public byte[] writeExcelReport(String ReportTitle[][],String columnHeader[], String dataInArr[][],String columnFooter[][], int param_width[]) throws Exception {ByteArrayOutputStream bufferOb = null; // 直接输出到流中bufferOb = writeExcelStream(ReportTitle, columnHeader, dataInArr,columnFooter, param_width);if (bufferOb != null)return bufferOb.toByteArray();elsereturn null;}/** ** @param ops * @return */private WritableWorkbook createWorkBook(OutputStream ops) {try {return Workbook.createWorkbook(ops);} catch (IOException e) {e.printStackTrace();return null;}}/** ** @param workbook * @param sheetName * @param index * @return */private WritableSheet createSheet(WritableWorkbook workbook,String sheetName, int index) {if (workbook == null)return null;return workbook.createSheet(sheetName, index);}/** ** @param ws * @param reportTitle * @throws WriteException * @throws RowsExceededException */private void createExcelTitle(WritableSheet ws, String reportTitle[][],int len) throws RowsExceededException, WriteException {if (ws == null || reportTitle == null)return;WritableFont boldBigWTF = new WritableFont(WritableFont.ARIAL, 30,WritableFont.BOLD);WritableFont boldNormalWTF = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE, WritableFont.BOLD);// 填充报表标题,一维是字串,二维是格式(对齐方式):ReportTitle,对齐方式:left,center,rightfor (int i = 0; i < reportTitle.length; i++) {ws.mergeCells(0, i, (len - 1), i); // 合并标题单元格WritableCellFormat reportheader = null;if (i == 0) {reportheader = new WritableCellFormat(boldBigWTF);} else {reportheader = new WritableCellFormat(boldNormalWTF);}reportheader.setBorder(Border.NONE, BorderLineStyle.NONE);if (reportTitle.equalsIgnoreCase("left")) {reportheader.setAlignment(Alignment.LEFT);} else if (reportTitle.equalsIgnoreCase("center")) {reportheader.setAlignment(Alignment.CENTRE);} else if (reportTitle.equalsIgnoreCase("right")) {reportheader.setAlignment(Alignment.RIGHT);}Label lable = new Label(0, i, reportTitle, reportheader);ws.addCell(lable);lable = null;}}/** ** @param ws * @param columnHeader * @param list_start * @throws WriteException */private void createColumnHeader(WritableSheet ws, String columnHeader[],int list_start) throws WriteException {if (ws == null || columnHeader == null)return;WritableFont wfc = new WritableFont(WritableFont.ARIAL); // 设置字体对象WritableCellFormat cellheader = new WritableCellFormat(wfc);cellheader.setBackground(Colour.GRAY_25);cellheader.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 填充columnHeader字段及样式for (int i = 0; i < columnHeader.length; i++) {Label lable = new Label(i, list_start, columnHeader, cellheader);ws.addCell(lable);lable = null;}}/** ** @param ws * @param data * @param list_start * @throws WriteException */private void fillInData(WritableSheet ws, String data[][], int list_start)throws WriteException {if (ws == null || data == null)return;int dataInArr_row = data.length;int dataInArr_col = data.length;WritableFont wfc = new WritableFont(WritableFont.ARIAL); // 设置字体对象WritableCellFormat wcfFC = new WritableCellFormat(wfc);for (int i = 0; i < dataInArr_row; i++) {for (int j = 0; j < dataInArr_col; j++) {Label lable = new jxl.write.Label(j, (i + list_start + 1),data, wcfFC);ws.addCell(lable);lable = null;}}}/** ** @param ws * @param columnFooter * @param rowStart * @throws WriteException * @throws RowsExceededException */private void createFooter(WritableSheet ws, String columnFooter[][],int rowStart) throws RowsExceededException, WriteException {if (ws == null || columnFooter == null)return;// 填充columnFooter字段及统计,一维是字串,二维是格式(跨度):columnFooterWritableFont wfc = new WritableFont(WritableFont.ARIAL); // 设置字体对象WritableCellFormat wcfFC = new WritableCellFormat(wfc);if (columnFooter != null) {int columnFooterWidth = columnFooter.length;int tmpInt = 0, summergeNum = 0;for (int i = 0; i < columnFooterWidth; i++) {tmpInt = Integer.parseInt(columnFooter);summergeNum += tmpInt;if (tmpInt > 1) {ws.mergeCells((summergeNum - tmpInt), (rowStart + 1),(summergeNum - 1), (rowStart + 1)); // 合并单元格}Label lable = new Label((summergeNum - tmpInt), (rowStart + 1),columnFooter, wcfFC);ws.addCell(lable);lable = null;}}}/** ** @param info * @return * @throws Exception */public ByteArrayOutputStream writeExcelStream(ExcelExportInfo info) {if (logger.isDebugEnabled()) {logger.debug("writeExcelStream(ExcelExportInfo) - start");}if (info == null || info.getDatas() == null|| info.getColumnHeader() == null || info.getFeilds() == null) {if (logger.isDebugEnabled()) {logger.debug("info is null");logger.debug("writeExcelStream(ExcelExportInfo) - end");}return null;}String title[][] = null;String datas[][] = null;String feilds[] = info.getFeilds();List list = info.getDatas();int rows = list.size();int columns = info.getFeilds().length;if (logger.isDebugEnabled()) {logger.debug(" rows : " + rows + " columns:" + columns);}if (rows == 0 || columns == 0)return null;if (info.getTitle() != null) {title = new String;title = info.getTitle();title = "center";if (title == null)title = "Excel报表打印";}datas = new String[];for (int i = 0; i < rows; i++) {Object obj = list.get(i);if (obj == null)continue;datas = new String;for (int j = 0; j < columns; j++) {datas = getParameter(obj, feilds);}}ByteArrayOutputStream returnByteArrayOutputStream = null;try {returnByteArrayOutputStream = this.writeExcelStream(title, info.getColumnHeader(), datas, info.getFooter(), info.getWidth());} catch (Exception e) {e.printStackTrace();}if (logger.isDebugEnabled()) {logger.debug("writeExcelStream(ExcelExportInfo) - end");}return returnByteArrayOutputStream;}/** ** @param obj * @param attr * @return */private String getParameter(Object obj, String attr) {String value = null;Object valuObj = ReflectionUtils.invokeGetterMethod(obj, attr);value = (valuObj == null) ? null : valuObj.toString();return value;}/** ** 得到excel报表数据的字节流 ** @param ReportTitle * @param columnHeader * @param dataInArr * @param columnFooter * @param param_width * @throws Exception */public ByteArrayOutputStream writeExcelStream(String reportTitle[][],String columnHeader[], String datas[][], String columnFooter[][],int paramWidth[]) throws Exception {ByteArrayOutputStream bufferOb = new ByteArrayOutputStream(); // 直接输出到字节流中(内存中)int i = 0;int list_start = 3; // 列表数据从第4行开始写(默认)int default_column_width = 20; // 表格默认宽度int dataInArr_row = (datas == null) ? 0 : datas.length; // 得到数组行数int dataInArr_col = (datas == null) ? 0 : datas.length; // 得到数组列数if (dataInArr_col == 0 && paramWidth != null) {dataInArr_col = paramWidth.length;} else if (dataInArr_col == 0)dataInArr_col = 1;if (paramWidth == null) {paramWidth = new int;for (i = 0; i < dataInArr_col; i++) {paramWidth = default_column_width;}}WritableWorkbook wwb = createWorkBook(bufferOb); // 建立excel工作空间WritableSheet ws = createSheet(wwb, "报表显示(打印)", 0); // 建立报表表单// 设置表格宽度for (i = 0; i < dataInArr_col; i++) {ws.setColumnView(i, paramWidth);}// 填充报表标题,一维是字串,二维是格式(对齐方式):ReportTitle,对齐方式:left,center,rightint reportTitleLen = reportTitle == null ? 0 : reportTitle.length;list_start = reportTitleLen;this.createExcelTitle(ws, reportTitle, dataInArr_col);this.createColumnHeader(ws, columnHeader, list_start); // list_start从多少行开始写数据this.fillInData(ws, datas, list_start);this.createFooter(ws, columnFooter, dataInArr_row + list_start);wwb.write();wwb.close();reportTitle = null;columnHeader = null;datas = null;columnFooter = null;paramWidth = null;return bufferOb;}/** ** @param info * @return * @throws Exception */public void writeExcel(OutputStream stream, ExcelExportInfo info) {if (logger.isDebugEnabled()) {logger.debug("writeExcelStream(ExcelExportInfo) - start");}if (info == null || info.getDatas() == null|| info.getColumnHeader() == null || info.getFeilds() == null) {if (logger.isDebugEnabled()) {logger.debug("info is null");logger.debug("writeExcelStream(ExcelExportInfo) - end");}return;}String title[][] = null;String datas[][] = null;String feilds[] = info.getFeilds();List list = info.getDatas();int rows = list.size();int columns = info.getFeilds().length;if (logger.isDebugEnabled()) {logger.debug(" rows : " + rows + " columns:" + columns);}if (rows == 0 || columns == 0)return;if (info.getTitle() != null) {title = new String;title = info.getTitle();title = "center";if (title == null)title = "Excel报表打印";}datas = new String[];for (int i = 0; i < rows; i++) {Object obj = list.get(i);if (obj == null)continue;datas = new String;for (int j = 0; j < columns; j++) {datas = getParameter(obj, feilds);}}try {this.writeExcel(stream, title, info.getColumnHeader(), datas, info.getFooter(), info.getWidth());} catch (Exception e) {e.printStackTrace();}if (logger.isDebugEnabled()) {logger.debug("writeExcelStream(ExcelExportInfo) - end");}}/** ** 得到excel报表数据的字节流 ** @param ReportTitle * @param columnHeader * @param dataInArr * @param columnFooter * @param param_width * @throws Exception */public void writeExcel(OutputStream stream, String reportTitle[][],String columnHeader[], String datas[][], String columnFooter[][],int paramWidth[]) throws Exception {int i = 0;int list_start = 3; // 列表数据从第4行开始写(默认)int default_column_width = 20; // 表格默认宽度int dataInArr_row = (datas == null) ? 0 : datas.length; // 得到数组行数int dataInArr_col = (datas == null) ? 0 : datas.length; // 得到数组列数if (dataInArr_col == 0 && paramWidth != null) {dataInArr_col = paramWidth.length;} else if (dataInArr_col == 0)dataInArr_col = 1;if (paramWidth == null) {paramWidth = new int;for (i = 0; i < dataInArr_col; i++) {paramWidth = default_column_width;}}WritableWorkbook wwb = createWorkBook(stream); // 建立excel工作空间WritableSheet ws = createSheet(wwb, "报表显示(打印)", 0); // 建立报表表单// 设置表格宽度for (i = 0; i < dataInArr_col; i++) {ws.setColumnView(i, paramWidth);}// 填充报表标题,一维是字串,二维是格式(对齐方式):ReportTitle,对齐方式:left,center,rightint reportTitleLen = reportTitle == null ? 0 : reportTitle.length;list_start = reportTitleLen;this.createExcelTitle(ws, reportTitle, dataInArr_col);this.createColumnHeader(ws, columnHeader, list_start); // list_start从多少行开始写数据this.fillInData(ws, datas, list_start);this.createFooter(ws, columnFooter, dataInArr_row + list_start);wwb.write();wwb.close();reportTitle = null;columnHeader = null;datas = null;columnFooter = null;paramWidth = null;}/** * 读excel表格中文字 ** @param fileName * @param x * @param y * @throws Exception */public String readExcelCell(String fileName, int x, int y) throws Exception {File f = new File(fileName);InputStream os = new FileInputStream(f);jxl.Workbook book = Workbook.getWorkbook(os);jxl.Sheet sheet = book.getSheet(0);Cell cell1 = sheet.getCell(x, y);String result = cell1.getContents();book.close();return result;}/** * 读excel表格中文字 ** @param book * @param x * @param y * @throws Exception */public String readExcelCell(Workbook book, int x, int y) throws Exception {jxl.Sheet sheet = book.getSheet(0);Cell cell1 = sheet.getCell(x, y);String result = cell1.getContents();return result;}/** * 把excel数据读入到数组中 ** @param fileName * @param sheetNo * 工作表顺序号,默认为0 * @param x_start * 左面开始的列数 * @param y_start * 头开始的行数 * @param width * 如果宽度为0(默认),就读出所有列 * @param height * 如果高度为0(默认),就读出所有行 * @throws Exception */public String[][] readExcel(String fileName, int sheetNo, int x_start,int y_start, int columns, int rows) throws Exception {// 数据校正if (sheetNo < 0)sheetNo = 0;if (x_start < 0)x_start = 0;if (y_start < 0)y_start = 0;Workbook book = null;Sheet sheet = null; // 获得第一个工作表对象int tmpInt = 0;book = this.getWorkBook(fileName);if (book == null)return null;sheet = book.getSheet(sheetNo);tmpInt = sheet.getColumns();if (columns == 0 || columns > tmpInt)columns = tmpInt;tmpInt = sheet.getRows();if (rows == 0 || rows > tmpInt)rows = tmpInt;String[][] reArr = new String;for (int y = 0; y < rows; y++) {for (int x = 0; x < columns; x++) {int cel_x = x_start + x;int cel_y = y_start + y;reArr = sheet.getCell(cel_x, cel_y).getContents(); // cel_x,列// cel_y// 行}}book.close();return reArr;}/** * 把excel数据读入到数组中 ** @param inputstream * @param sheetNo * 工作表顺序号,默认为0 * @param x_start * 左面开始的列数 * @param y_start * 头开始的行数 * @param width * 如果宽度为0(默认),就读出所有列 * @param height * 如果高度为0(默认),就读出所有行 * @throws Exception */public String[][] readExcel(InputStream ins, int sheetNo, int x_start,int y_start, int width, int height) throws Exception {// 数据校正if (sheetNo < 0)sheetNo = 0;if (x_start < 0)x_start = 0;if (y_start < 0)y_start = 0;Workbook book = null;Sheet sheet = null; // 获得第一个工作表对象int tmpInt = 0;book = this.getWorkBook(ins);if (book == null)return null;sheet = book.getSheet(sheetNo);tmpInt = sheet.getColumns();if (width == 0 || width > tmpInt)width = tmpInt;tmpInt = sheet.getRows();if (height == 0 || height > tmpInt)height = tmpInt;String[][] reArr = new String;int x = 0, y = 0;for (x = x_start; x < (x_start + width); x++) {for (y = y_start; y < (y_start + height); y++) {reArr = sheet.getCell(x, y).getContents();}}book.close();return reArr;}/** ** @param ins * @return */public Workbook getWorkBook(InputStream ins) {Workbook book = null;try {book = Workbook.getWorkbook(ins);} catch (BiffException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return book;}/** ** @param ins * @return */public Workbook getWorkBook(String fileName) {File file = null;InputStream is = null;if (fileName == null)return null;file = new File(fileName);if (!file.exists())return null;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();}return this.getWorkBook(is);}/** * 写数组数据到excel ** @param fileName * 写入的excel文件明 * @param sheetNo * 工作表顺序号,默认为0 * @param sheetName * 工作表名 * @param x_start * 左面开始的列数 * @param y_start * 头开始的行数 * @param columnW * 列宽 * @param inputArr * 输入的数组 * @param maxPerPage * 每页最大记录数(最大记录数为10000) * @throws Exception */public void writeExcel(String fileName, int sheetNo, String sheetName,int x_start, int y_start, int columnW, String[][] inputArr,int maxPerPage) throws Exception {// 数据校正if (sheetNo < 0)sheetNo = 0;if (sheetName == null)sheetName = "数据列表";if (x_start < 0)x_start = 0;if (y_start < 0)y_start = 0;if (columnW < 0)columnW = 10;if (maxPerPage < 0 || maxPerPage > 10000) {maxPerPage = 10000;System.out.println("每页最大记录数超出最大数10000,改为10000输出");}// 数据写入excelint dataStart = 0; // 数据行开始int dataEnd = 0; // 数据行结束if (inputArr != null && inputArr.length > 0) {int inputArrLength = inputArr.length; // 数据行数int loop = 0;if (inputArrLength % maxPerPage == 0) {loop = inputArrLength / maxPerPage;} else {loop = inputArrLength / maxPerPage + 1;}int baseYstart = y_start;String fileExtName = fileName.substring(fileName.lastIndexOf("."));String filePathName = fileName.replaceAll(fileExtName, "");for (int i = 0; i < loop; i++) {dataStart = i * maxPerPage;y_start = baseYstart + dataStart;dataEnd = dataStart + maxPerPage;if (dataEnd >= inputArrLength) {dataEnd = inputArrLength;}if (i > 0) {fileName = filePathName + " (" + i + ")" + fileExtName;}writeExcel(fileName, sheetNo, sheetName, x_start, baseYstart,columnW, inputArr, dataStart, dataEnd);}}inputArr = null;}/** * 写数组数据到excel ** @param fileName * @param sheetNo * @param sheetName * @param x_start * @param y_base * @param columnW * @param inputArr * @param dataStart * @param dataEnd * @throws Exception */private void writeExcel(String fileName, int sheetNo, String sheetName,int x_start, int y_base, int columnW, String[][] inputArr,int dataStart, int dataEnd) throws Exception {File os = new File(fileName);if (os.exists()) {if (!os.delete()) {throw new Exception("文件已经存在,并且不能删除");}}WritableWorkbook book = null;WritableSheet ws = null;if (os.createNewFile()) {book = Workbook.createWorkbook(os);ws = book.createSheet(sheetName, sheetNo);} else {throw new Exception("文件创建失败");}if (inputArr != null && inputArr.length > 0) {int inputArrWidth = inputArr.length;int x = 0, y = 0;for (x = 0; x < inputArrWidth; x++) {ws.setColumnView((x + x_start), columnW); // 设置列宽for (y = dataStart; y < dataEnd; y++) {Label lb = new Label((x + x_start),(y - dataStart + y_base), inputArr);ws.addCell(lb);}}}book.write();book.close();inputArr = null;}/** * 写数组数据到excel文件中 ** @param sheetNo * @param sheetName * @param x_start * @param y_base * @param columnW * @param inputArr * @throws Exception */public void writeExcel(String fileName, int sheetNo, String sheetName,int x_start, int y_base, int columnW, String[][] inputArr)throws Exception {File os = new File(fileName);if (os.exists()) {if (!os.delete()) {throw new Exception("文件已经存在,并且不能删除");}}WritableWorkbook book = null;WritableSheet ws = null;if (os.createNewFile()) {book = Workbook.createWorkbook(os);ws = book.createSheet(sheetName, sheetNo);} else {throw new Exception("文件创建失败");}if (inputArr != null && inputArr.length > 0) {int inputArrWidth = inputArr.length;int inputArrHeight = inputArr.length;int x = 0, y = 0;for (x = 0; x < inputArrWidth; x++) {ws.setColumnView((x + x_start), columnW); // 设置列宽for (y = 0; y < inputArrHeight; y++) {Label lb = new Label((x + x_start), (y + y_base),inputArr);ws.addCell(lb);}}}book.write();book.close();inputArr = null;}/** * 写数组数据到excel流中 ** @param sheetNo * @param sheetName * @param x_start * @param y_base * @param columnW * @param inputArr * @throws Exception */public ByteArrayOutputStream writeExcelStream(int sheetNo,String sheetName, int x_start, int y_base, int columnW,String[][] inputArr) throws Exception {ByteArrayOutputStream os = new ByteArrayOutputStream();WritableWorkbook book = null;WritableSheet ws = null;book = Workbook.createWorkbook(os);ws = book.createSheet(sheetName, sheetNo);if (inputArr != null && inputArr.length > 0) {int inputArrWidth = inputArr.length;int inputArrHeight = inputArr.length;int x = 0, y = 0;for (x = 0; x < inputArrWidth; x++) {ws.setColumnView((x + x_start), columnW); // 设置列宽for (y = 0; y < inputArrHeight; y++) {Label lb = new Label((x + x_start), (y + y_base),inputArr);ws.addCell(lb);}}}book.write();book.close();inputArr = null;return os;}public byte[] writeExcel(int sheetNo, String sheetName, int x_start,int y_base, int columnW, String[][] inputArr) throws Exception {return writeExcelStream(sheetNo, sheetName, x_start, y_base, columnW,inputArr).toByteArray();}} ExcelExportInfo.java
package com.sobey.pms.util.excel;import java.util.List;public class ExcelExportInfo {private List datas;private String columnHeader[];private String feilds[];private String footer[][];private String title;private int width[];private String fileName = "ExcelExport.xls";public String[] getColumnHeader() {return columnHeader;}public void setColumnHeader(String[] columnHeader) {this.columnHeader = columnHeader;}public void setColumnHeader(String columnHeaders) {if (columnHeaders != null)this.columnHeader = columnHeaders.split(",");elsethis.columnHeader = null;}public List getDatas() {return datas;}public void setDatas(List datas) {this.datas = datas;}public String[] getFeilds() {return feilds;}public void setFeilds(String[] feilds) {this.feilds = feilds;}public void setFeilds(String feilds) {if (feilds != null)this.feilds = feilds.split(",");elsethis.feilds = null;}public String[][] getFooter() {return footer;}public void setFooter(String[][] footer) {this.footer = footer;}public int[] getWidth() {return width;}public void setWidth(int[] width) {this.width = width;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}}
页:
[1]