java怎么读取上传的excel文件

java怎么读取上传的excel文件,第1张

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那样血统高贵,但是在使用过程中,感觉简单方便,对中文支持非常好,功能也比较强大渣埋睁。

引入poi的jar包,大致如下:

读取代码如下,应该能看得含缺逗明白吧

import java.io.FileInputStream

import java.io.FileNotFoundException

import java.io.IOException

import java.io.InputStream

import java.math.BigDecimal

import java.text.DecimalFormat

import java.text.SimpleDateFormat

import org.apache.poi.xssf.usermodel.XSSFCell

import org.apache.poi.xssf.usermodel.XSSFRow

import org.apache.poi.xssf.usermodel.XSSFSheet

import org.apache.poi.xssf.usermodel.XSSFWorkbook

public class ExcelUtil2007 {

/**读取excel文件流的指定索引的sheet

 * @param inputStream excel文件流

 * @param sheetIndex 要读取的sheet的索引

 * @return

 * @throws FileNotFoundException

 * @throws IOException

 */

public 谈卖static XSSFSheet readExcel(InputStream inputStream,int sheetIndex) throws FileNotFoundException, IOException

{

return readExcel(inputStream).getSheetAt(sheetIndex)

}

/**读取excel文件的指定索引的sheet

 * @param filePath excel文件路径

 * @param sheetIndex 要读取的sheet的索引

 * @return

 * @throws IOException 

 * @throws FileNotFoundException 

 */

public static XSSFSheet readExcel(String 扮前filePath,int sheetIndex) throws FileNotFoundException, IOException

{

return readExcel(filePath).getSheetAt(sheetIndex)

}

/**读取excel文件的指定索引的sheet

 * @param filePath excel文件路径

 * @param sheetName 要读取的sheet的名称

 * @return

 * @throws IOException 

 * @throws FileNotFoundException 

 */

public static XSSFSheet readExcel(String filePath,String sheetName) throws FileNotFoundException, IOException

{

return readExcel(filePath).getSheet(sheetName)

}

/**读取excel文件,返回XSSFWorkbook对象

 * @param filePath excel文件路径

 * @return 

 * @throws FileNotFoundException

 * @throws IOException

 */

public static XSSFWorkbook readExcel(String filePath) throws FileNotFoundException, IOException

{

XSSFWorkbook wb=new XSSFWorkbook(new FileInputStream(filePath))

return wb

}

/**读取excel文件流,返回XSSFWorkbook对象

 * @param inputStream excel文件流

 * @return

 * @throws FileNotFoundException

 * @throws IOException

 */

public static XSSFWorkbook readExcel(InputStream inputStream) throws FileNotFoundException, IOException

{

XSSFWorkbook wb=new XSSFWorkbook(inputStream)

return wb

}

/***读取excel中指定的单元格,并返回字符串形式的值

 * 1.数字

 * 2.字符

 * 3.公式(返回的为公式内容,非单元格的值)

 * 4.空

 * @param st 要读取的sheet对象

 * @param rowIndex 行索引

 * @param colIndex 列索引

 * @param isDate 是否要取的是日期(是则返回yyyy-MM-dd格式的字符串)

 * @return

 */

public static String getCellString(XSSFSheet st,int rowIndex,int colIndex,boolean isDate){

String s=""

XSSFRow row=st.getRow(rowIndex)

if(row == null) return ""

XSSFCell cell=row.getCell(colIndex)

if(cell == null) return ""

if (cell.getCellType() == 0) {//数字

if(isDate)s=new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue())

else s = trimPointO(String.valueOf(getStringValue(cell)).trim())

}else if (cell.getCellType() == 1){//字符(excel中的空格,不是全角,也不是半角,不知道是神马,反正就是" "这个)

s=cell.getRichStringCellValue().getString().replaceAll(" ", " ").trim()

// s=cell.getStringCellValue()//07API新增,好像跟上一句一致

}

else if (cell.getCellType() == 2){//公式

s=cell.getCellFormula()

}

else if (cell.getCellType() == 3){//空

s=""

}

return s

}

/**如果数字以 .0 结尾,则去掉.0

 * @param s

 * @return

 */

public static String trimPointO(String s) {

if (s.endsWith(".0"))

return s.substring(0, s.length() - 2)

else

return s

}

/**处理科学计数法和百分比模式的数字单元格

 * @param cell

 * @return

 */

public static String getStringValue(XSSFCell cell) {

String sValue = null

short dataFormat = cell.getCellStyle().getDataFormat()

double d = cell.getNumericCellValue()

BigDecimal b = new BigDecimal(Double.toString(d))

//百分比样式的

if (dataFormat == 0xa || dataFormat == 9) {

b=b.multiply(new BigDecimal(100))

//String temp=b.toPlainString()

DecimalFormat df=new DecimalFormat("0.00")//保留两位小数的百分比格式

sValue = df.format(b) + "%"

}else{

sValue = b.toPlainString()

}

return sValue

}

}

本例使用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

}

if (hasValue) {

result.add(values)

}

}

}

in.close()

String[][] returnArray = new String[result.size()][rowSize]

for (int i = 0i <returnArray.lengthi++) {

returnArray[i] = (String[]) result.get(i)

}

return returnArray

}

/**

* 去掉字符串右边的空格

* @param str 要处理的字符串

* @return 处理后的字符串

*/

public static String rightTrim(String str) {

if (str == null) {

return ""

}

int length = str.length()

for (int i = length - 1i >= 0i--) {

if (str.charAt(i) != 0x20) {

break

}

length--

}

return str.substring(0, length)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12381462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存