1、FileUtils后面接的路径是src下的文件,FileUtils的jar包没有测试过,有待验证; 2、解析表格使用jar包是org.apache.poi的jar包; 3、判断某一行是否是表头下面代码中只能作为参考,只是简单的表格样式,要根据时间情况做出调整
解析表格的jar包
<dependency>
<groupId>org.apache.poi
</groupId>
<artifactId>poi
</artifactId>
<version>3.10-FINAL
</version>
</dependency>
<dependency>
<groupId>org.apache.poi
</groupId>
<artifactId>poi-ooxml
</artifactId>
<version>3.10-FINAL
</version>
</dependency>
<dependency>
<groupId>org.apache.poi
</groupId>
<artifactId>poi-ooxml-schemas
</artifactId>
<version>3.10-FINAL
</version>
</dependency>
FileUtils
<dependency>
<groupId>org.apache.xmlgraphics
</groupId>
<artifactId>fop-transcoder-allinone
</artifactId>
<version>2.4
</version>
</dependency>
java代码
@Test
public void test() throws Exception
{
byte[] fileByte
= new byte[0];
String url
= null
;
File file
= new File("D:\\collect\\service\\src\\test.xlsx");
fileByte
= FileUtils
.readFileToByteArray(file
);
url
= "https://ajdklmfjdisjufdjasdmfa.xls";
if (url
.endsWith(".xls") || url
.endsWith(".xlsx")) {
InputStream fin
= null
;
try {
fin
= new ByteArrayInputStream(fileByte
);
Workbook workbook
= null
;
workbook
= org
.apache
.poi
.ss
.usermodel
.WorkbookFactory
.create(fin
);
for (int a
= 0; a
< workbook
.getNumberOfSheets(); a
++) {
Sheet sheet
= workbook
.getSheetAt(a
);
Map
<Integer
, org
.apache
.poi
.ss
.util
.CellRangeAddress
> mergeMap
= new HashMap<>();
for (int i
= 0; i
< sheet
.getNumMergedRegions(); i
++) {
org
.apache
.poi
.ss
.util
.CellRangeAddress cellRangeAddress
= sheet
.getMergedRegion(i
);
mergeMap
.put(cellRangeAddress
.getFirstRow(), cellRangeAddress
);
}
int rowNum
= sheet
.getLastRowNum();
int cellNum
= sheet
.getRow(rowNum
- 1).getPhysicalNumberOfCells();
int index
= 0;
boolean flag
= false;
for (int k
= 0; k
< sheet
.getPhysicalNumberOfRows(); k
++) {
int thisCellNum
= sheet
.getRow(k
).getPhysicalNumberOfCells();
String first
= sheet
.getRow(k
).getCell(0).toString();
String last
= sheet
.getRow(k
).getCell(thisCellNum
- 1).toString();
if (mergeMap
.get(k
) == null
&& (thisCellNum
== cellNum
) && StringUtils
.isNotBlank(first
) && StringUtils
.isNotBlank(last
)) {
index
= k
;
break;
}
for (int j
= 0; j
< thisCellNum
; j
++) {
String curCell
= sheet
.getRow(k
).getCell(j
).toString();
if ("序号".equals(curCell
) || "纳税人名称".equals(curCell
) || "纳税人识别号".equals(curCell
)) {
flag
= true;
break;
}
}
if (flag
) {
index
= k
;
break;
}
}
for (int i
= index
+ 1; i
< sheet
.getPhysicalNumberOfRows(); i
++) {
JSONObject jsonObject
= new JSONObject();
Row row
= sheet
.getRow(i
);
String f
= row
.getCell(0).toString();
if (StringUtils
.isBlank(f
) || mergeMap
.get(i
) != null
) {
continue;
}
for (int j
= 0; j
< sheet
.getRow(i
).getPhysicalNumberOfCells(); j
++) {
String key
= sheet
.getRow(index
).getCell(j
).toString();
String value
= "";
if (row
.getCell(j
) != null
) {
if (row
.getCell(j
).getCellType() == Cell
.CELL_TYPE_BLANK
) {
value
= "";
} else if (row
.getCell(j
).getCellType() == Cell
.CELL_TYPE_NUMERIC
) {
if (DateUtil
.isCellDateFormatted(row
.getCell(j
))) {
Date tempValue
= row
.getCell(j
).getDateCellValue();
SimpleDateFormat simpleFormat
= new SimpleDateFormat("yyyy-MM-dd");
value
= simpleFormat
.format(tempValue
);
} else {
value
= String
.valueOf(row
.getCell(j
).getNumericCellValue());
}
} else if (row
.getCell(j
).getCellType() == org
.apache
.poi
.ss
.usermodel
.Cell
.CELL_TYPE_STRING
) {
value
= row
.getCell(j
).getStringCellValue();
} else {
value
= row
.getCell(j
).toString();
}
}
if (key
!= null
&& key
!= "null" && StringUtils
.isNotBlank(key
)) {
jsonObject
.put(key
, value
);
}
}
Iterator it
= jsonObject
.entrySet().iterator();
while (it
.hasNext()) {
Map
.Entry entry
= (Map
.Entry
) it
.next();
System
.out
.println(entry
.getKey() + " = " + entry
.getValue());
}
System
.out
.println("-----------------------------");
}
}
} catch (Exception e
) {
e
.printStackTrace();
} finally {
if (fin
!= null
) {
fin
.close();
}
}
}
}
表格样式
成绩表
序号 年级 姓名 成绩
1 一 张三 88
2 二 张思 99
3 三 张武 90
结果
姓名 = 张三
序号 = 1.0
成绩 = 88.0
年级 = 一
-----------------------------
姓名 = 张思
序号 = 2.0
成绩 = 99.0
年级 = 二
-----------------------------
姓名 = 张武
序号 = 3.0
成绩 = 90.0
年级 = 三
-----------------------------