A. java讀取excel時怎麼過濾掉裡面的空行
利用continue,如果當前行是空的,結束當前循環繼續下一循環
B. jAVA-poi讀取excel忽略第一行
在遍歷行的時候,把第一行去掉不就可以了么,下面是示例
for (int j = 0; j < rowSize; j++) {//遍歷行
Row row = sheet.getRow(j);
if (row == null) {//略過空行
continue;
}
int cellSize = row.getLastCellNum();//行中有多少個單元格,也就是有多少列
if (j == 0) {//第一行是標題行
continue;
}
} else {//其他行是數據行
Map<String, String> rowMap = new HashMap<String, String>();//對應一個數據行
for (int k = 0; k < titles.size(); k++) {
Cell cell = row.getCell(k);
String key = titles.get(k);
String value = null;
if (cell != null) {
value = cell.toString();
}
rowMap.put(key, value);
}
C. java jxl 讀取excel時讀取了很多空行 求解決辦法
這應該是excel文件中的問題,看看是不是文件中後面那些行裡面有空格,或者做過其他標記,可以直接把excel的第21到第31行選中然後刪除,保存好之後重新用jxl讀取試試。
D. 讀Excel檔時讀出了幾條空行,如何去掉空行
可以選擇表中的任何一個單元格,然後用定位條件查找空值,刪除就可以了!
E. JAVA讀取EXCEL文件
你可以用一個int集合去存儲每個編碼的初始位置,然後每次讀取就從這個int集合中讀取指定范圍內的內容,(注意,在讀取的時候,獲取全部行的函數會把部分空行也讀取出來,這個要記得做處理,一般會出現在集合最後一條)
F. java操作excel的問題
可以是一下GCExcel這個組件,相較POI,GCExcel在功能上更加完善,並且完全參照Excel的規范。如果想要刪除行不留空白行,直接在GCExcel調用刪除命令就可以了,不需要再做上移的操作,更加易於理解。刪除行時只需要輸入行的名稱或者索引,像這樣:
worksheet2.getRange("A3:A5").getEntireRow().delete();
或worksheet2.getRange("2:4").delete(); 支持刪除多行。
參考文檔:網頁鏈接
G. 求一段java讀取excel的程序,讀為一個二維數組,excel中有許多空格,也要保留,或者用什麼特殊數字代替
先看代碼,挨句解釋:
一般遍歷使用兩種方式,1:得到總的行數和每行的列數,然後循環。2:使用迭代
先看第一種:
Java代碼
package com.golden.test;
import java.io.File;
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
*
* @author 崔素強
*
*/
public class PoiReadXls2 {
public static void main(String[] args) {
File f = new File("c:\\a.xls");
try {
FileInputStream is = new FileInputStream(f);
HSSFWorkbook wbs = new HSSFWorkbook(is);
HSSFSheet childSheet = wbs.getSheetAt(0);
// System.out.println(childSheet.getPhysicalNumberOfRows());
System.out.println("有行數" + childSheet.getLastRowNum());
for (int j = 0; j < childSheet.getLastRowNum(); j++) {
HSSFRow row = childSheet.getRow(j);
// System.out.println(row.getPhysicalNumberOfCells());
// System.out.println("有列數" + row.getLastCellNum());
if (null != row) {
for (int k = 0; k < row.getLastCellNum(); k++) {
HSSFCell cell = row.getCell(k);
if (null != cell) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 數字
System.out.print(cell.getNumericCellValue()
+ " ");
break;
case HSSFCell.CELL_TYPE_STRING: // 字元串
System.out.print(cell.getStringCellValue()
+ " ");
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
System.out.println(cell.getBooleanCellValue()
+ " ");
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
System.out.print(cell.getCellFormula() + " ");
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
System.out.println(" ");
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
System.out.println(" ");
break;
default:
System.out.print("未知類型 ");
break;
}
} else {
System.out.print("- ");
}
}
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
得到Excel的文件然後讀取,這個很簡單。關鍵有兩個地方,也許在網上會看到有的這樣使用有的那樣使用。
System.out.println("有行數" + childSheet.getLastRowNum());
System.out.println(childSheet.getPhysicalNumberOfRows());
System.out.println("有列數" + row.getLastCellNum());
System.out.println(row.getPhysicalNumberOfCells());
如果人都拷貝代碼進行使用了,不知道有什麼區別。太多的區別不知道,但是有一點我發現了,那就是如果中間各行或者隔列的話getPhysicalNumberOfRows和getPhysicalNumberOfCells就不能讀取到所有的行和列了。
再者,一定要對單元格的格式進行判斷switch (cell.getCellType()),不同的單元格格式使用不同的方法。最後加上為止類型,以防萬一。
而且在數字類型里,又分為了純數字和時間格式:
Java代碼
case HSSFCell.CELL_TYPE_NUMERIC: // 數值型
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是date類型則 ,獲取該cell的date值
value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else { // 純數字
value = String.valueOf(cell.getNumericCellValue());
}
還有一種迭代的方法:
Java代碼
package com.golden.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import org.apache.poi.hssf.usermodel.HSSFCell;
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;
/**
*
* @author 崔素強
*
*/
public class PoiReadXls {
@SuppressWarnings( { "unchecked", "deprecation" })
public static void main(String[] args) {
File f = new File("c:\\a.xls");
try {
InputStream input = new FileInputStream(f);
POIFSFileSystem fs = new POIFSFileSystem(input);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
HSSFRow row = (HSSFRow) rows.next();
// System.out.print("行:" + row.getRowNum() + " ");
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
HSSFCell cell = (HSSFCell) cells.next();
// System.out.println("列:" + cell.getCellNum());
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 數字
System.out.print(cell.getNumericCellValue() + " ");
break;
case HSSFCell.CELL_TYPE_STRING: // 字元串
System.out.print(cell.getStringCellValue() + " ");
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
System.out.println(cell.getBooleanCellValue() + " ");
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
System.out.print(cell.getCellFormula() + " ");
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
System.out.println(" ");
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
System.out.println(" ");
break;
default:
System.out.print("未知類型 ");
break;
}
}
System.out.println();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
這種方法,如果數據的緊湊的,使用還是方便的,但是我發現,如果是空行或者是空列,他就會隔過去。具體的自己試試就知道了。
另外,也能看到這里得到Excel文件的方式是通過File,如果要引用到Struts2里,這是很簡單的,因為Struts2上傳時Action里定義的就是File或者File數組。
H. java編寫Excel過濾小工具在線等
方式1:記錄要過濾的行號,然後根據這個記錄去操作。
方式2:兩個文件內容全讀到變數里,然後程序去過濾
I. 用java程序或者shell script讀取excel文件中並且去掉文件裡面所有的空格
shell是Unix/Linux里的東西,雖然Windows上也可以裝Cygwin之類的模擬shell的東西,但終究只能處理普通文本文件。
除非你把excel另存為文本文件。
J. java poi讀取Excel,怎麼判斷空行
項目中常用的寫法:
public static boolean isRowEmpty(Row row) {
for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
Cell cell = row.getCell(c);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK)
return false;
}
return true;
}