كيفية استخدام المكررات وأماكن استخدامها

كيفية استخدام المكررات

مكرر الخلايا

هناك طرق مختلفة للوصول إلى مكرر الخلايا، ويمكن للشخص استخدام أي من هذه الطرق استنادًا إلى متطلبات التطبيق. إليك الأساليب التي تعيد مكرر الخلايا.

  1. Cells.iterator
  2. Row.iterator
  3. Range.iterator

تسترجع جميع الطرق المذكورة أعلاه المكدس الذي يسمح بتجوال مجموعة الخلايا التي تم تهيئتها.

يوضح المثال التالي تنفيذ فئة المكدس لمجموعة الخلايا.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
String dataDir = Utils.getDataDir(CellsIterator.class);
// Load a file in an instance of Workbook
Workbook book = new Workbook(dataDir + "sample.xlsx");
// Get the iterator from Cells collection
Iterator cellIterator = book.getWorksheets().get(0).getCells().iterator();
// Traverse cells in the collection
while (cellIterator.hasNext()) {
Cell cell = (Cell) cellIterator.next();
;
System.out.println(cell.getName() + " " + cell.getValue());
}
// Get iterator from an object of Row
Iterator rowIterator = book.getWorksheets().get(0).getCells().getRows().get(0).iterator();
// Traverse cells in the given row
while (rowIterator.hasNext()) {
Cell cell = (Cell) rowIterator.next();
System.out.println(cell.getName() + " " + cell.getValue());
}
// Get iterator from an object of Range
Iterator rangeIterator = book.getWorksheets().get(0).getCells().createRange("A1:B10").iterator();
// Traverse cells in the range
while (rangeIterator.hasNext()) {
Cell cell = (Cell) rangeIterator.next();
System.out.println(cell.getName() + " " + cell.getValue());
}
مكدس الصفوف

يمكن الوصول إلى مكدس الصفوف أثناء استخدام طريقة RowCollection.iterator. يوضح المثال التالي تنفيذ المكدس لفئة RowCollection.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
String dataDir = Utils.getDataDir(RowsIterator.class);
// Load a file in an instance of Workbook
Workbook book = new Workbook(dataDir + "sample.xlsx");
// Get the iterator for RowCollection
Iterator rowsIterator = book.getWorksheets().get(0).getCells().getRows().iterator();
// Traverse rows in the collection
while (rowsIterator.hasNext()) {
Row row = (Row) rowsIterator.next();
System.out.println(row.getIndex());
}
مكدس الأعمدة

يمكن الوصول إلى مكدس الأعمدة أثناء استخدام طريقة ColumnCollection.iterator. يوضح المثال التالي تنفيذ المكدس لفئة ColumnCollection.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
String dataDir = Utils.getDataDir(ColumnsIterator.class);
// Load a file in an instance of Workbook
Workbook book = new Workbook(dataDir + "sample.xlsx");
// Get the iterator for ColumnsCollection
Iterator colsIterator = book.getWorksheets().get(0).getCells().getColumns().iterator();
// Traverse columns in the collection
while (colsIterator.hasNext()) {
Column col = (Column) colsIterator.next();
System.out.println(col.getIndex());
}

أين يجب استخدام المكدس

من أجل مناقشة مزايا استخدام المكدس، دعنا نأخذ مثالًا في الوقت الحقيقي.

سيناريو

متطلبات تطبيق هي أن يتم تجوال كل الخلايا في ورقة عمل معينة لقراءة قيمها. قد يكون هناك عدة طرق لتنفيذ هذا الهدف. يتم توضيح بعضها أدناه.

استخدام نطاق العرض
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
String dataDir = Utils.getDataDir(UsingDisplayRange.class);
// Load a file in an instance of Workbook
Workbook book = new Workbook(dataDir + "sample.xlsx");
// Get Cells collection of first worksheet
Cells cells = book.getWorksheets().get(0).getCells();
// Get the MaxDisplayRange
Range displayRange = cells.getMaxDisplayRange();
// Loop over all cells in the MaxDisplayRange
for (int row = displayRange.getFirstRow(); row < displayRange.getRowCount(); row++) {
for (int col = displayRange.getFirstColumn(); col < displayRange.getColumnCount(); col++) {
// Read the Cell value
System.out.println(displayRange.get(row, col).getStringValue());
}
}
استخدام MaxDataRow و MaxDataColumn
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
String dataDir = Utils.getDataDir(UsingMaxDataRowAndMaxDataColumn.class);
// Load a file in an instance of Workbook
Workbook book = new Workbook(dataDir + "sample.xlsx");
// Get Cells collection of first worksheet
Cells cells = book.getWorksheets().get(0).getCells();
// Loop over all cells
for (int row = 0; row < cells.getMaxDataRow(); row++) {
for (int col = 0; col < cells.getMaxDataColumn(); col++) {
// Read the Cell value
System.out.println(cells.get(row, col).getStringValue());
}
}

كما يمكنك أن تلاحظ أن النهجين المذكورين أعلاه يستخدمان منطقًا أو أقل مماثل، وهو؛ حلقة عبر كل الخلايا في المجموعة لقراءة قيم الخلية. يمكن أن يكون هذا مشكلة لعدة أسباب كما هو مناقش أدناه.

١. الواجهات البرمجية مثل MaxRow، MaxDataRow، MaxColumn، MaxDataColumn & MaxDisplayRange تتطلب وقتًا إضافيًا لجمع الإحصاءات المقابلة. في حالة كانت مصفوفة البيانات (الصفوف مرات الأعمدة) كبيرة، قد تفرض استخدام هذه الواجهات عقوبة أداء.

  1. في معظم الحالات، لا تتم إنشاء جميع الخلايا في النطاق المعطى. في مثل هذه الحالات، فحص كل خلية في البيانات ليس فعَّالًا كمقارنة بفحص الخلايا المهيئة فقط. ١. الوصول إلى خلية في حلقة مثل Cells.get(rowIndex, columnIndex) سيتسبب في تهيئة جميع كائنات الخلايا في النطاق، والذي قد يتسبب في نهاية المطاف في خطأ نفاد الذاكرة.
الاستنتاج

بناءً على الحقائق المذكورة أعلاه، فإن السيناريوهات الممكنة التالية حيث ينبغي استخدام المكدس.

  1. الوصول القراءة فقط لمجموعة الخلايا مطلوب، أي ؛ المتطلب هو فقط فحص الخلايا.
  2. يجب عبور عدد كبير من الخلايا.
  3. يجب عبور الخلايا/الصفوف/الأعمدة المهيأة فقط.