本例使用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;
}
2. java 怎么根据Excel 单元格地址(名称框内容)获取单元格cell
//先获取工作簿,
Workbook wb = new HSSFWorkbook(fis);//fis是读取这个文件的流
//根据工作簿获取第几页,比如第一页
Sheet sheet = wb.getSheetAt(0);//根据第几页获取,获取第一页
//根据页获取行,你说获取第二行
Row row = sheet.getRow(1);//获取第二行
//根据行和列获取具体的单元格
Cell cell = row.getCell(1);//第二列
//此处的cell就是第二行第二列的那个单元格
我这是回答很粗略,如果还想了解详细的内容,可以跟我说。
用Java读取表格,使用的这些类(比如Workbook、Sheet),是要导入第三方的包的,因为JDK是没有这些类的。关于这些类的用法,我说的这么一点肯定不够
3. 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文件,但需要遵循一些最佳实践,以确保操作的顺利进行和数据的安全。