java上传读取excel文件
Ⅰ java实现EXCEL表格文件(.xls格式)的读取、修改、保存、另存为、排序等操作。大佬们帮帮忙
import Java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public class ReadExcel {
public static void readExcel(File file){
try {
InputStream inputStream = new FileInputStream(file);
String fileName = file.getName();
Workbook wb = null;
// poi-3.9.jar 只可以读取2007以下的版本,后缀为:xsl
wb = new HSSFWorkbook(inputStream);//解析xls格式
Sheet sheet = wb.getSheetAt(0);//第一个工作表 ,第二个则为1,以此类推...
int firstRowIndex = sheet.getFirstRowNum();
int lastRowIndex = sheet.getLastRowNum();
for(int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex ++){
Row row = sheet.getRow(rIndex);
if(row != null){
int firstCellIndex = row.getFirstCellNum();
// int lastCellIndex = row.getLastCellNum();
//此处参数cIndex决定可以取到excel的列数。
for(int cIndex = firstCellIndex; cIndex < 3; cIndex ++){
Cell cell = row.getCell(cIndex);
String value = "";
if(cell != null){
value = cell.toString();
System.out.print(value+"\t");
}
}
System.out.println();
}
}
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
File file = new File("D:/test.xls");
readExcel(file);
}
}
Ⅱ java如何读取整个excel文件的内容
本例使用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=0;i<rowLength;i++) {
for(int j=0;j<result[i].length;j++) {
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 = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex);
// 第一行为标题,不取
for (int rowIndex = ignoreRows; rowIndex <= 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 = 0; columnIndex <= 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 = 0; i < returnArray.length; i++) {
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 - 1; i >= 0; i--) {
if (str.charAt(i) != 0x20) {
break;
}
length--;
}
return str.substring(0, length);
}
}
Ⅲ 要用Java POI读取Excel文件中的数据,并且实现对数据的格式校验,输入错误信息
在使用Java POI读取Excel文件时,需要根据具体需求进行操作。如果仅提供一个POI读取Excel的大致方法,可能难以满足实际需求。例如,对于不同列的数据类型,需要进行明确的定义和处理。比如,某列数据应视为时间类型,另一列则应视为数字类型,若直接读取,系统将无法识别这些数据的具体格式,从而导致错误。
因此,读取Excel文件时,应当先了解数据的具体格式。这包括但不限于时间、数字、文本等多种类型。只有在明确数据类型的情况下,才能进行正确的读取和处理。比如,对于时间类型的数据,需要使用相应的时间格式进行解析;对于数字类型的数据,则需要确保其格式正确,避免读取时产生错误。
在读取过程中,还需对数据进行格式校验,确保其符合预设的要求。比如,对于时间类型的数据,可以检查其是否符合特定的日期格式;对于数字类型的数据,可以检查其是否为有效的数字值。如果发现不符合预设格式的数据,应记录错误信息,以便后续处理或提示用户修正错误。
综上所述,读取Excel文件时,不能盲目进行,而应结合具体需求,对数据类型进行明确定义,并对数据进行格式校验,以确保读取过程的准确性和可靠性。
Ⅳ java能读写同一个excel吗
是的,Java能够读取和写入同一个Excel文件,但需要谨慎操作。在进行读取操作后,必须确保关闭读取流,以避免写入操作时发生冲突。否则,可能会导致数据丢失或格式错误等问题。为了确保数据的完整性和准确性,通常推荐使用专门的库,如Apache POI或JXL等,它们提供了丰富的API来处理Excel文件。
使用这些库时,读取操作通常涉及到创建一个Workbook对象,通过Sheet对象访问具体的Sheet,然后通过Row和Cell对象访问数据。完成读取后,务必关闭输入流,释放资源。接下来,你可以使用同样的Workbook对象进行写入操作。需要注意的是,写入操作应尽量避免在读取流仍然打开的情况下进行。
为了更好地管理资源,可以使用try-with-resources语句来自动关闭流。例如,在读取Excel文件后,可以这样写:
try (FileInputStream fis = new FileInputStream(new File("path/to/file.xlsx"))) {
Workbook workbook = new XSSFWorkbook(fis);
}
这样可以确保在读取完成后,输入流会自动关闭,从而避免了资源泄漏的问题。在写入操作中,同样可以使用类似的方法来确保资源的正确管理。
除了资源管理之外,使用合适的库还可以帮助你更高效地处理复杂的Excel文件,例如处理多个Sheet、合并单元格、设置样式等。因此,对于需要频繁读写Excel文件的场景,推荐使用成熟的库来提高开发效率和代码质量。
综上所述,Java确实可以读取和写入同一个Excel文件,但需要遵循一些最佳实践,以确保操作的顺利进行和数据的安全。
Ⅳ 在java中如何使用poi从excel中读取数据
使用EasyExcel读取Excel文件在Java中的流程相当直观,借助于阿里开源的EasyExcel库,开发者可以轻松地完成这一任务。EasyExcel提供了一套简单而强大的API,帮助开发者快速实现Excel数据的读取。
以下是一个示例代码,展示如何使用EasyExcel读取Excel文件:
java
List dataList = EasyExcel.read("/path/to/your/excel/file.xlsx")
.sheet()
.doRead();
这里需要注意的是,您需要将`/path/to/your/excel/file.xlsx`替换为实际的Excel文件路径,同时,`YourData`类应当根据Excel文件中的列名和数据类型进行创建,以确保与文件内容的匹配。请根据实际项目需求定义这个类。
为了深入了解EasyExcel的用法和功能,您还可以参考其官方文档:基于Java的Excel处理工具 | Easy Excel。这份文档提供了详细的API介绍、示例代码以及常见问题解答,有助于您更熟练地使用这个库。
总之,使用EasyExcel进行Excel文件数据读取是一个高效且便捷的过程。借助于其简单的API和丰富的文档支持,开发者可以轻松地将Excel数据整合到Java应用中,从而实现更加灵活和强大的数据处理功能。