2013-04-26 18 views
29

Guys Şu anda excel dosyaları ile çalışmak için POI 3.9 kütüphanesini kullanıyorum. Bir Excel dosyasında bir dizi satır döndüren getLastRowNum() işlevini biliyorum. Bir Excel dosyası sadece 1 satır, getLastRowNum() döner varsaPOI kitaplığı kullanarak bir Excel dosyasında satır sayısı nasıl alınır?

tek sorun getLastRowNum() olduğunu getLastRowNum() döner 2. bir Excel dosyası ilk 3 satır kullanır Yani eğer 0.

başlayarak sayısı ile bir dizi döndürür

Excel dosyası tamamen boş olduğunda sorun oluşur. getLastRowNum() hala 0 döndürür, bu yüzden Excel dosyasının 1 satırlık veriye sahip olup olmadığını veya boş olup olmadığını belirleyemiyorum.

Bir Excel dosyasının boş olup olmadığını nasıl algılayabilirim? Bir kontrol ediniz

if 
(getLastRowNum()<1){ 
res="Sheet Cannot be empty"; 
return 
} 

yaparsanız

cevap

55

Bu başlığı hariç verilerle en az bir satır var emin olacaktır

+5

+1 Marcias. Sadece, sadece Delete tuşuna basarak hücreleri silerseniz, satırlar hala fiziksel olarak var gibi görünür ve eski sayım geri döner. – anujin

+1

Aslında, boş olmayan bir değere sahip olan satırları saymak isterseniz, bunu kendi başınıza döndürmeniz gerekeceğini düşünüyorum. Emin değilim, ama anlıyorum ki, bu yöntem hiç “bildirilmemiş” türden satırların sayısını döndürüyor. – macias

+1

UYARI: Sayfada boş satırlar varsa, getFhysicalNumberOfRows, döndürdüğü sayıma dahil edilmez. Ancak, getLastRowNum da teneke üzerinde söylediklerini tam olarak yapar.Bu nedenle, yineleme döngüsünüzde üst sınır olarak getLastRowNum + 1'i kullanmanız gereken tüm satırları yinelemeniz gerekir - varolmayan satırlarla ilgilenmeye dikkat edin. –

2

Sheet.getPhysicalNumberOfRows() deneyin. Aşağıda gayet iyi çalışan programım var. Excel dosyasında üç sütun vardır. Kimliği, ADI, LASTNAME

XSSFWorkbook workbook = new XSSFWorkbook(inputstream); 
     XSSFSheet sheet = workbook.getSheetAt(0); 
     Row header = sheet.getRow(0); 
     int n = header.getLastCellNum(); 
     String header1 = header.getCell(0).getStringCellValue(); 
     String header2 = header.getCell(1).getStringCellValue(); 
     String header3 = header.getCell(2).getStringCellValue(); 
     if (header1.equals("ID") && header2.equals("NAME") 
       && header3.equals("LASTNAME")) { 
      if(sheet.getLastRowNum()<1){ 
       System.out.println("Sheet empty"); 
         return; 
      } 
         iterate over sheet to get cell values 
     }else{ 
          SOP("invalid format"); 
          return; 
          } 
+1

[docs] (https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html#getLastRowNum) sıfır tabanlı olduğunu not edin. Yani getLastRowNum() ', hiçbir sütun olmadığı zaman veya yalnızca 1 olduğunda (sizin durumunuzda başlık) 0 değerini döndürür. Bu nedenle, getPhysicalNumberOfRows() 'da herhangi bir satır olup olmadığını kontrol etmek için de kullanılmalıdır. –

+0

ayrıca [HSSF sayfası dokümanları] (https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFSheet.html#getLastRowNum()) bu konuyla ilgili daha fazla içeriğe sahiptir. –

1

iki Yapabilicekleriniz vardır

kullanım

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells(); 

veya aralarında

    ince bir fark vardır

    int noOfColumns = sh.getRow(0).getLastCellNum(); 
    

  1. Seçenek 1 aslında içeriği ile doldurulur sütunların hiçbir verir

  2. Seçenek 2 sadece size son sütunda dizinini verir (10 sütun 2 sütun dolu değilse sen 9 alacak). Bu nedenle Sheet.getPhysicalNumberOfRows() yana 'getLastCellNum()'

1

yapılan boş satır ve Sheet.getLastRowNum() döner 0 sayılmaz her ikisi de bir satır ya da satır yoksa, bir doğru toplam satır sayısını hesaplamak için iki yöntem bir arada kullanımı. Not: Bu, bir elektronik tabloyu, hiçbir boşta sahip olduğu gibi boş bir satır ile ele alır ancak çoğu amaç için bu muhtemelen tamamdır.

İlgili konular