java怎么读取上传的excel文件,解决办法:
添加jar文件,java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
jxl对Excel表格的认识,每个单元格的位置认为是由一个二维坐标(i,j)给定,其中i表示列,如岁j表示行,并且从上到下递增,从左到右递增。
对于合并单元格的以最左,最上的单元格的坐标为准。如下图中t.xls,一班名单(0,0),陈茵(1,2),陈开先(1,6)。
4.java代码对t.xls的读取
ava *** 作Excel的一种方法:
在开源世界中,有两套比较有影响的API可供使用,一液镇个是POI,一个是jExcelAPI。
其中jExcelAPI是一个韩国程序员的作品,虽然没有POI那样血统高贵,但是在使用过程中,感觉简单方便,对中文支持非常好,功能也比较强大渣埋睁。
本例使用java来读取excel的内容并展桥缓出出结果,代码如下:复制代码 代码如下:
import java.io.BufferedInputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.IOException
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.ArrayList
import java.util.Arrays
import java.util.Date
import java.util.List
import org.apache.poi.hssf.usermodel.HSSFCell
import org.apache.poi.hssf.usermodel.HSSFDateUtil
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.poifs.filesystem.POIFSFileSystem
public class ExcelOperate {
public static void main(String[] args) throws Exception {
File file = new File("ExcelDemo.xls")
String[][] result = getData(file, 1)
int rowLength = result.length
for(int i=0i<rowLengthi++) {
for(int j=0j<result[i].lengthj++) {
System.out.print(result[i][j]+"\举做t\t")
}
System.out.println()
}
}
/**
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
* @param file 读取数据的源Excel
* @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/
public static String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
List<String[]>result = new ArrayList<String[]>()
int rowSize = 0
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file))
/正消衡/ 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in)
HSSFWorkbook wb = new HSSFWorkbook(fs)
HSSFCell cell = null
for (int sheetIndex = 0sheetIndex <wb.getNumberOfSheets()sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex)
// 第一行为标题,不取
for (int rowIndex = ignoreRowsrowIndex <= st.getLastRowNum()rowIndex++) {
HSSFRow row = st.getRow(rowIndex)
if (row == null) {
continue
}
int tempRowSize = row.getLastCellNum() + 1
if (tempRowSize >rowSize) {
rowSize = tempRowSize
}
String[] values = new String[rowSize]
Arrays.fill(values, "")
boolean hasValue = false
for (short columnIndex = 0columnIndex <= row.getLastCellNum()columnIndex++) {
String value = ""
cell = row.getCell(columnIndex)
if (cell != null) {
// 注意:一定要设成这个,否则可能会出现乱码
cell.setEncoding(HSSFCell.ENCODING_UTF_16)
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue()
break
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue()
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date)
} else {
value = ""
}
} else {
value = new DecimalFormat("0").format(cell
.getNumericCellValue())
}
break
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue()
} else {
value = cell.getNumericCellValue() + ""
}
break
case HSSFCell.CELL_TYPE_BLANK:
break
case HSSFCell.CELL_TYPE_ERROR:
value = ""
break
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
: "N")
break
default:
value = ""
}
}
if (columnIndex == 0 &&value.trim().equals("")) {
break
}
values[columnIndex] = rightTrim(value)
hasValue = true
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)