API العام التغييرات في Aspose.Cells 8.5.0

تمت إضافة واجهات برمجة التطبيقات

تم تغيير معلمات وظيفة ICustom.CalculateCustomFunction

إذا كانت معلمة واحدة للوظيفة المخصصة هي مرجع الخلية ، في الإصدار القديم Aspose.Cells APIs المستخدمة لتحويل مرجع الخلية إلى قيمة خلية واحدة أو صفيف كائن لجميع قيم الخلية في المنطقة المشار إليها. ومع ذلك ، بالنسبة للعديد من الوظائف والمستخدمين ، لا يلزم وجود مصفوفة قيم الخلية لجميع الخلايا في المنطقة المشار إليها ، فهم يحتاجون فقط إلى خلية واحدة مطابقة لموضع الصيغة ، أو يحتاجون فقط إلى المرجع نفسه بدلاً من قيمة الخلية أو صفيف القيمة . في بعض الحالات ، يؤدي جلب جميع قيم الخلايا إلى زيادة خطر حدوث خطأ مرجعي دائري.

لدعم مثل هذا النوع من المتطلبات ، قام Aspose.Cells for Java 8.5.0 بتغيير قيمة المعلمة إلى “paramsList” للمنطقة المشار إليها. منذ الإصدار 8.5.0 ، يضع API الكائن RefifiedArea في “paramsList” عندما تكون المعلمة المقابلة مرجعًا أو تكون النتيجة المحسوبة مرجعًا. إذا كنت بحاجة إلى المرجع نفسه ، فيمكنك استخدام RefifiedArea مباشرة. إذا كنت بحاجة إلى الحصول على قيمة خلية مفردة واحدة من المرجع المقابل لموضع الصيغة ، يمكنك استخدام طريقة RefifiedArea.getValue (rowOffset ، int colOffset). إذا كنت بحاجة إلى مصفوفة قيم الخلية للمنطقة بأكملها ، فيمكنك استخدام طريقة RefifiedArea.getValues.

الآن نظرًا لأن 8.5.0 Aspose.Cells for Java يعطي 8.5.0 RefifiedArea في “paramsList” ، فلن تكون هناك حاجة إلى مجموعة RefifiedAreaCollection في “ContextObjects” بعد الآن (في الإصدارات القديمة لم يكن بإمكانها إعطاء مخطط واحد لواحد لمعلمات الوظيفة المخصصة دائمًا) ، لذلك قام هذا الإصدار أيضًا بإزالته من “ContextObjects” الآن.

يتطلب هذا التغيير إجراء تغييرات على رمز تنفيذ وظيفة ICustomFunction قليلاً عندما تحتاج إلى قيمة / قيم المعلمة المرجعية.

التنفيذ القديم

 public object CalculateCustomFunction(string functionName, ArrayList paramsList, ArrayList contextObjects)

{

    ...

    object o = paramsList[i];

    if (o is Array)

    {

        ...

    }

    else if...

    ...

}

تنفيذ جديد

 public object CalculateCustomFunction(string functionName, ArrayList paramsList, ArrayList contextObjects)

{

    ...

    object o = paramsList[i];

    if(o is ReferredArea) //fetch data from reference

    {

        ReferredArea ra = (ReferredArea)o;

        if(ra.IsArea)

        {

            o = ra.getValues();

        }

        else

        {

            o = ra.getValue(0, 0);

        }

    }

    if (o is Array)

    {

        ...

    }

    else if...

    ...

}

تمت إضافة خيارات احتساب الفصل

كشف Aspose.Cells for Java 8.5.0 عن فئة CalculationOptions لإضافة المزيد من المرونة والقابلية للتوسعة لمحرك حساب الصيغة. الفئة المضافة حديثًا لها الخصائص التالية.

  1. CalculationOptions.CalcStackSize: تحديد حجم المكدس لحساب الخلايا بشكل متكرر. -1 يحدد أن الحساب سيستخدم WorkbookSettings.CalcStackSize من المصنف المقابل.
  2. CalculationOptions.CustomFunction: توسيع محرك حساب الصيغة باستخدام صيغة مخصصة.
  3. CalculationOptions.IgnoreError: تشير قيمة النوع المنطقي إلى ما إذا كان سيتم إخفاء الأخطاء أثناء حساب الصيغ ، حيث قد تكون الأخطاء ناتجة عن وظيفة غير مدعومة أو ارتباط خارجي أو أكثر.
  4. CalculationOptions.PrecisionStrategy: قيمة نوع CalculationPrecisionStrategy التي تحدد استراتيجية معالجة دقة الحساب.

تمت إضافة حساب العد الدقة الإستراتيجية

كشف Aspose.Cells for Java 8.5.0 إستراتيجية حساب التعداد لإضافة المزيد من المرونة لمحرك حساب الصيغة للحصول على النتائج المرجوة. هذا التعداد استراتيجيات معالجة الحساب بدقة. نظرًا لمسألة الدقة في IEEE 754 Floating-Point Arithmetic ، فقد لا يتم حساب بعض الصيغ التي تبدو بسيطة لإعطاء النتائج المتوقعة ، وبالتالي فإن أحدث إصدار API قد كشف الحقول التالية للحصول على النتائج المرجوة وفقًا للتحديد.

  1. CalculationPrecisionStrategy.DECIMAL: يستخدم العلامة العشرية كمعامل حيثما أمكن ، وهو أكثر فاعلية من اعتبارات الأداء.
  2. CalculationPrecisionStrategy.ROUND: تقريب نتائج الحساب وفقًا لأرقام ذات دلالة.
  3. CalculationPrecisionStrategy.NONE: لم يتم تطبيق أي استراتيجية لذلك أثناء الحساب يستخدم المحرك القيمة المزدوجة الأصلية كمعامل ويعيد النتيجة مباشرة. هذا الخيار هو الأكثر فعالية ويمكن تطبيقه في معظم الحالات.

تمت إضافة طرق لاستخدام خيارات الحساب

مع إصدار v8.5.0 ، أضاف Aspose.Cells API إصدارات التحميل الزائد لطريقة calculateFormula كما هو موضح أدناه.

  • Workbook.calculateFormula (خيارات الحساب)
  • Worksheet.calculateFormula (خيارات CalculationOptions ، منطقية عودية)
  • Cell.culate (خيارات الحساب)

تمت إضافة PasteType في حقل التعداد. ROW_HEIGHTS مضاف

قدمت Aspose.Cells واجهات برمجة التطبيقات PasteType.ROW_حقل تعداد HEIGHTS لغرض نسخ ارتفاعات الصفوف أثناء نسخ النطاقات. عند ضبط خاصية PasteOptions.PasteType على ((PasteType.ROW_HEIGHTS}} سيتم نسخ ارتفاعات جميع الصفوف داخل نطاق المصدر إلى النطاق الوجهة.

Java

 //Create workbook object

Workbook workbook = new Workbook();

//Source worksheet

Worksheet srcSheet = workbook.getWorksheets().get(0);

//Add destination worksheet

Worksheet dstSheet = workbook.getWorksheets().add("Destination Sheet");

//Set the row height of the 4th row

//This row height will be copied to destination range

srcSheet.getCells().setRowHeight(3, 50);

//Create source range to be copied

Range srcRange = srcSheet.getCells().createRange("A1:D10");

//Create destination range in destination worksheet

Range dstRange = dstSheet.getCells().createRange("A1:D10");

//PasteOptions, we want to copy row heights of source range to destination range

PasteOptions opts = new PasteOptions();

opts.setPasteType(PasteType.ROW_HEIGHTS);

//Copy source range to destination range with paste options

dstRange.copy(srcRange, opts);

//Write informative message in cell D4 of destination worksheet

dstSheet.getCells().get("D4").putValue("Row heights of source range copied to destination range");

//Save the workbook in xlsx format

workbook.save("output.xlsx", SaveFormat.XLSX);

تمت إضافة خاصية SheetRender.PageScale

عندما تقوم بتعيين مقياس إعداد الصفحة باستخداميصلح ل n صفحة (ق) عرض في متر طول الخيار ، Microsoft يقوم Excel بحساب عامل تحجيم إعداد الصفحة. يمكن تحقيق نفس الشيء باستخدام خاصية SheetRender.PageScale المعروضة بواسطة Aspose.Cells for Java 8.5.0. تقوم هذه الخاصية بإرجاع قيمة مزدوجة يمكن تحويلها إلى قيمة النسبة المئوية. على سبيل المثال ، إذا كانت تُرجع 0.507968245 ، فهذا يعني أن عامل القياس هو 51٪.

Java

 //Create workbook object

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.getWorksheets().get(0);

//Put some data in these cells

worksheet.getCells().get("A4").putValue("Test");

worksheet.getCells().get("S4").putValue("Test");

//Set paper size

worksheet.getPageSetup().setPaperSize(PaperSizeType.PAPER_A_4);

//Set fit to pages wide as 1

worksheet.getPageSetup().setFitToPagesWide(1);

//Calculate page scale via sheet render

SheetRender sr = new SheetRender(worksheet, new ImageOrPrintOptions());

//Write the page scale value

System.out.println(sr.getPageScale());

تمت إضافة خلية التعداد CellValueFormatStrategy

Aspose.Cells for Java 8.5.0 أضاف إستراتيجية تعداد جديدة CellValueFormatStrategy للتعامل مع المواقف التي يجب فيها استخراج قيم الخلية مع تطبيق التنسيق أو بدونه. يحتوي Enumeration CellValueFormatStrategy على الحقول التالية.

  1. CellValueFormatStrategy.CELL_STYLE: منسق فقط بالتنسيق الأصلي للخلية.
  2. CellValueFormatStrategy.DISPLAY_STYLE: منسق بنمط الخلية المعروض.
  3. CellValueFormatStrategy.NONE: غير مهيأ.

الطريقة Cell.getStringValue مضافة

من أجل استخدام تعداد CellValueFormatStrategy ، كشف v8.5.0 عن طريقة Cell.getStringValue التي يمكن أن تقبل معلمة من النوع CellValueFormatStrategy وإرجاع القيمة التي تعتمد على الخيار المحدد.

يوضح مقتطف الشفرة التالي كيفية استخدام طريقة Cells.getStringValue المكشوفة حديثًا.

Java

 //Create workbook

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.getWorksheets().get(0);

//Access cell A1

Cell cell = worksheet.getCells().get("A1");

//Put value inside the cell

cell.putValue(0.012345);

//Format the cell that it should display 0.01 instead of 0.012345

Style style = cell.getStyle();

style.setNumber(2);

cell.setStyle(style);

//Get string value as Cell Style

String value = cell.getStringValue(CellValueFormatStrategy.CELL_STYLE);

System.out.println(value);

//Get string value without any formatting

value = cell.getStringValue(CellValueFormatStrategy.NONE);

System.out.println(value);