jxl生成excel


最近項目中要用到生成excel,就寫下來分享給大家

其實很簡單,碼代碼,自己看:

首先需要導jxl jar包進來

<!-- jxl execl -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>

代碼:

public static void main(String[] args) throws IOException, RowsExceededException, WriteException {
File excelFile = new File("C:\\Users\\zhangzhen\\Desktop\\excel\\補盲擴總表.xls");
WritableWorkbook workbook = Workbook.createWorkbook(excelFile);// 生成工作簿
WritableSheet sheet = workbook.createSheet("擴容明細", 0);// 生成工作表,此處參數一為工作表名稱,參數二為第幾個工作業,默認從0開始
// 居中 字體11
WritableFont Bwf1 = new WritableFont(WritableFont.ARIAL, 11, WritableFont.NO_BOLD, false);
WritableCellFormat wcf1 = new WritableCellFormat(Bwf1);
wcf1.setAlignment(jxl.write.Alignment.CENTRE);//
// 設置垂直對齊為居中對齊
wcf1.setVerticalAlignment(VerticalAlignment.CENTRE);
// 設置框線為實線
wcf1.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN);

Map<String, Object> map = new LinkedHashMap<String, Object>();// 設置表頭,
map.put("需求日期", 20);// 表頭,表格寬度
sheet.mergeCells(0, 0, 0, 1);// 此函數為合並單元格,參數分別為列,行,合並到哪一列,合並到哪一行,
map.put("擴容類型", 20);
sheet.mergeCells(1, 0, 1, 1);
map.put("所屬單位", 20);
sheet.mergeCells(2, 0, 2, 1);
map.put("所屬工隊", 20);
sheet.mergeCells(3, 0, 3, 1);
map.put("是否超時", 20);
sheet.mergeCells(4, 0, 4, 1);
map.put("修補擴類型", 20);
sheet.mergeCells(5, 0, 5, 1);
map.put("關聯安裝工單號", 20);
sheet.mergeCells(6, 0, 6, 1);
map.put("片區", 20);
sheet.mergeCells(7, 0, 7, 1);
map.put("鎮區", 20);
sheet.mergeCells(8, 0, 8, 1);
map.put("五級站點", 60);
sheet.mergeCells(9, 0, 9, 1);
map.put("需求內容", 60);
sheet.mergeCells(10, 0, 10, 1);
map.put("箱體名稱", 60);

map.put("分光器名稱", 60);

map.put("完成情況", 20);// 此處因為合並單元格,第十四列和第十五列需另外設置列寬
sheet.setColumnView(14, 20);
sheet.setColumnView(15, 20);
sheet.mergeCells(13, 0, 15, 0);
setCols(sheet, 0, 0, map, wcf1);
map.clear();
map.put("結算費用", 20);
sheet.mergeCells(16, 0, 16, 1);
map.put("完工日期", 20);
sheet.mergeCells(17, 0, 17, 1);
map.put("現場當前環節", 20);
sheet.mergeCells(18, 0, 18, 1);
setCols(sheet, 16, 0, map, wcf1);
map.clear();
map.put("", 60);
setCols(sheet, 19, 0, map, wcf1);
setCols(sheet, 20, 0, map, wcf1);
map.clear();
map.put("系統當前環節", 20);
sheet.mergeCells(21, 0, 21, 1);
setCols(sheet, 21, 0, map, wcf1);
map.clear();
map.put("", 20);
setCols(sheet, 22, 0, map, wcf1);
setCols(sheet, 23, 0, map, wcf1);
setCols(sheet, 24, 0, map, wcf1);
setCols(sheet, 25, 0, map, wcf1);
setCols(sheet, 26, 0, map, wcf1);
map.clear();
map.put("服開工單號", 60);
sheet.mergeCells(27, 0, 27, 1);
map.put("服開起單時間", 60);
sheet.mergeCells(28, 0, 28, 1);
map.put("派單時間", 60);
sheet.mergeCells(29, 0, 29, 1);
map.put("服開環節", 60);
sheet.mergeCells(30, 0, 30, 1);
map.put("備注", 60);
sheet.mergeCells(31, 0, 31, 1);
setCols(sheet, 27, 0, map, wcf1);
// 設置第二行表頭
map.clear();
map.put("", 60);
setCols(sheet, 11, 1, map, wcf1);
setCols(sheet, 12, 1, map, wcf1);
map.clear();
map.put("箱體個數", 20);
map.put("分光器數", 20);
map.put("總端口數", 20);
setCols(sheet, 13, 1, map, wcf1);
map.clear();
map.put("裝維人員聯系電話", 60);
map.put("裝維人員姓名", 60);
setCols(sheet, 19, 1, map, wcf1);
map.clear();
map.put("GF箱體材料", 20);
map.put("光纜芯數", 20);
map.put("光纜米數", 20);
map.put("分光器類型", 20);
map.put("分光器個數", 20);
setCols(sheet, 22, 1, map, wcf1);

// 填充數據
List list = new ArrayList<Object>();
List list1 = new ArrayList<Object>();
list1.add("2019-08-15");
list1.add("TOP站點");
list1.add("鐵通本網");
list1.add("新余施工隊");
list1.add("否");
list1.add("新址加箱");
list1.add("GC-20150822");
list1.add("北區");
list1.add("寮步鎮");
list1.add("(鐵通本網)西溪社區珠東新村");
list1.add("新址加箱:【JIA】武威市蘇武鎮蘇武社區15號后牆-GJ20建議安裝位置:西溪珠西250號");
list1.add("【JIA】武威市蘇武鎮蘇武社區新村西溪珠西250號-GJ20-GF18");
list1.add("武威市蘇武鎮蘇武社區新村城中村小區(二級)1/4-POS001-1:8-快");
list1.add("1");
list1.add("1");
list1.add("8");
list1.add("");
list1.add("2019-08-15");
list1.add("擴容完成");
list1.add("15623144000");
list1.add("新余");
list1.add("");
list1.add("016芯 非金屬");
list1.add("6芯");
list1.add("2");
list1.add("插片式1:8-SC(大方頭)");
list1.add("1");
list1.add("201905220120");
list1.add("2019-08-15");
list1.add("2019-08-15");
list1.add("1");
list1.add("暫無");
list.add(list1);

setExeclSheetData(2, 0, list, sheet, wcf1);

workbook.write();
workbook.close();
}

 

/***
*
* @param sheet 工作表
* @param cols 第幾列
* @param rows 第幾行
* @param map 表頭數據
* @param format 單元格格式
* @throws RowsExceededException
* @throws WriteException
*/
public static void setCols(WritableSheet sheet, int cols, int rows, Map<String, Object> map,
WritableCellFormat format) throws RowsExceededException, WriteException {

int c = cols;

Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
int width = (int) entry.getValue();
sheet.addCell(new Label(c, rows, entry.getKey(), format));// 設置單元格內容和格式
sheet.setColumnView(c, width);// 設置單元格格式
c++;
}

}

/**
* 指定起點的塊級數據填充
*
* @param row 起點 行
* @param col 起點 列
* @param list 欲填充數據的二維列表
* @param sheet
* @param format 單元樣式 若設置為null 將使用默認樣式
* @throws RowsExceededException
* @throws WriteException
*/

public static void setExeclSheetData(int row, int col, List<List<Object>> list, WritableSheet sheet,
WritableCellFormat format) throws RowsExceededException, WriteException {

if (format == null) {
WritableFont Bwf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
format = new jxl.write.WritableCellFormat(Bwf);
format.setAlignment(jxl.write.Alignment.LEFT);// 默認居左
// 設置垂直對齊為居中對齊
format.setVerticalAlignment(VerticalAlignment.CENTRE);
// 設置框線為實線
format.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN);
}

// 索引第幾行的數據
int index = 0;
// 行
for (int i = row; i < list.size() + row; i++) {
// 索引的第幾列的數據
int index_x = 0;
// 列
for (int j = col; j < list.get(index).size() + col; j++) {

Object data = list.get(index).get(index_x);
// 數值型
if (data instanceof Double) {//此處做判斷是為方便使用聚合函數
double d = ((Double) data).doubleValue();
jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
sheet.addCell(numberC);
} else if (data instanceof Float) {
float d = ((Float) data).floatValue();
jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
sheet.addCell(numberC);
} else if (data instanceof Integer) {
int d = ((Integer) data).intValue();
jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
sheet.addCell(numberC);
} else {// 字符串 類型
sheet.addCell(new Label(j, i, data + "", format));
}

index_x++;
}
index++;
}

}

就這么多,上面注釋也寫得很清楚,不懂可以下方留言(本人也是菜鳥,不喜勿噴!)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM