سؤال

لدي فارغة جدول لكن عندما أريد الوصول إليه مع Apache POI (الإصدار 3.10) يقول وقد 1024 الأعمدة و 20 المادية الأعمدة.
أنا حقا حذف جميع الخلايا ، فقط بعض التنسيق يزال ، ولكن أي محتوى.
و إذا قمت بحذف بعض الأعمدة مع LibreOffice Calc (الإصدار 4.1.3.2), عدد الأعمدة فقط يزيد!ماذا يجري ؟
هل هناك طريقة يمكن الاعتماد عليها للحصول على العدد الحقيقي من الأعمدة (أو الخلايا في صف واحد)?

import java.net.URL;
import org.apache.poi.ss.usermodel.*;

public class Test {
    public static void main(final String... args) throws Exception {
        final URL url = new URL("http://aditsu.net/empty.xlsx");
        final Workbook w = WorkbookFactory.create(url.openStream());
        final Row r = w.getSheetAt(0).getRow(0);
        System.out.println(r.getLastCellNum());
        System.out.println(r.getPhysicalNumberOfCells());
    }
}
هل كانت مفيدة؟

المحلول

بعد تحقيق بعض أكثر, أعتقد أنني فهمت ما يحدث.

أولا بعض المصطلحات من البوي:هناك بعض الخلايا التي لا وجود لها في الواقع على الإطلاق في جدول البيانات - هذه تسمى في عداد المفقودين, أو غير معرف/لم يتم تعريف.ثم هناك بعض الخلايا التي يتم تعريف ولكن لا قيمة لها - هذه تسمى فارغة الخلايا.كلا النوعين من الخلايا تظهر فارغة في جدول بيانات البرنامج و لا يمكن تمييزها بصريا.

بلدي جدول لديه بعض الخلايا الفارغة التي ليبر أوفيس وأضاف في نهاية الصف (ربما الخلل).عند حذف أعمدة ، ليبر أوفيس يبدو أن التحول اللاحقة الخلايا (بما في ذلك الفراغ منها) إلى اليسار, و يضيف المزيد من الخلايا الفارغة في النهاية (ما يصل إلى 1024).

و الآن جزء رئيسي:لا getLastCellNum() ولا getPhysicalNumberOfCells() تجاهل الخلايا الفارغة. getLastCellNum() يعطي الماضي تعريف الخليوي ، getPhysicalNumberOfCells() يعطي عدد تعريف الخلايا على حد سواء بما في ذلك الخلايا الفارغة.هناك لا يبدو أن هناك أي طريقة المتاحة التي يتخطى الخلايا الفارغة.جافادوك على getPhysicalNumberOfCells() مضلل إلى حد ما - "لو الأعمدة 0,4,5 القيم ثم سيكون هناك 3", لكنه في الواقع عد الخلايا الفارغة أيضا ، التي لم يكن لديك حقا القيم.

لذلك الحل الوحيد الذي وجدته هو حلقة من خلال الخلايا تحقق مما إذا كانت فارغة.

ملاحظة جانبية: getLastRowNum() و getFirstCellNum() 0 بل getLastCellNum() 1-على أساس ، wtf ؟

نصائح أخرى

على الأرجح أن يكون لديك نوع من التنسيق تطبق بالنسبة لك صف.لدي فارغة xlsx ملفات تم إنشاؤها باستخدام excel و طريقة getRow تنتج null الصفوف الفارغة.

@aditsu كما في https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/Row.html, getLastCellNum() يحصل على مؤشر الخلية الأخيرة الواردة في هذا الصف زائد واحد.

+1 ليبر أوفيس strugle!انها علة, و في رأيي هو عشوائي جدا.أنا على الحصول على باطل عشوائيا, و غالبا ما يساعد لو حذف الصفوف الفارغة (خوار) و أعمدة فارغة (على الجانب الأيمن)....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top