From 7424159ad53bb377c322eddc98d5df47700e8329 Mon Sep 17 00:00:00 2001 From: NithishkumarRavikumar Date: Wed, 1 Apr 2026 15:35:06 +0530 Subject: [PATCH 1/3] 1019334: added and updated the existing contents and Formatting Content --- Document-Processing-toc.html | 11 +- .../Excel/Spreadsheet/React/border.md | 74 ++++ .../React/conditional-formatting.md | 113 ++++++ .../React/custom-number-formatting.md | 136 +++++++ .../Excel/Spreadsheet/React/formatting.md | 365 +----------------- .../React/images/spreadsheet-duplicate.png | Bin 0 -> 29575 bytes .../React/images/spreadsheet-move-tab.png | Bin 0 -> 16929 bytes .../images/spreadsheet_remove_borders.png | Bin 0 -> 34634 bytes .../Spreadsheet/React/number-formatting.md | 53 +++ .../Spreadsheet/React/text-cell-formatting.md | 60 +++ .../Excel/Spreadsheet/React/worksheet.md | 29 ++ .../spreadsheet/react/border-cs1/app/app.jsx | 71 ++++ .../spreadsheet/react/border-cs1/app/app.tsx | 71 ++++ .../react/border-cs1/app/datasource.jsx | 15 + .../react/border-cs1/app/datasource.tsx | 15 + .../spreadsheet/react/border-cs1/index.html | 36 ++ .../react/border-cs1/systemjs.config.js | 58 +++ 17 files changed, 758 insertions(+), 349 deletions(-) create mode 100644 Document-Processing/Excel/Spreadsheet/React/border.md create mode 100644 Document-Processing/Excel/Spreadsheet/React/conditional-formatting.md create mode 100644 Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md create mode 100644 Document-Processing/Excel/Spreadsheet/React/images/spreadsheet-duplicate.png create mode 100644 Document-Processing/Excel/Spreadsheet/React/images/spreadsheet-move-tab.png create mode 100644 Document-Processing/Excel/Spreadsheet/React/images/spreadsheet_remove_borders.png create mode 100644 Document-Processing/Excel/Spreadsheet/React/number-formatting.md create mode 100644 Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md create mode 100644 Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.jsx create mode 100644 Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.tsx create mode 100644 Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.jsx create mode 100644 Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.tsx create mode 100644 Document-Processing/code-snippet/spreadsheet/react/border-cs1/index.html create mode 100644 Document-Processing/code-snippet/spreadsheet/react/border-cs1/systemjs.config.js diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 1fb44f5e8a..0db2fb568f 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -5599,7 +5599,15 @@
  • Context Menu
  • Formulas
  • Data Validation
  • -
  • Formatting
  • +
  • Formatting + +
  • Illustrations
  • Rows and Columns
  • Sorting
  • @@ -5615,6 +5623,7 @@
  • Undo and Redo
  • Ribbon
  • Print
  • +
  • Border
  • Performance Best Practices
  • Globalization
  • Accessibility
  • diff --git a/Document-Processing/Excel/Spreadsheet/React/border.md b/Document-Processing/Excel/Spreadsheet/React/border.md new file mode 100644 index 0000000000..f2c0770524 --- /dev/null +++ b/Document-Processing/Excel/Spreadsheet/React/border.md @@ -0,0 +1,74 @@ +--- +layout: post +title: Border formatting in React Spreadsheet component | Syncfusion +description: Learn here how to apply and customize borders in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more. +control: Spreadsheet +platform: document-processing +documentation: ug +--- + +# Apply Borders to Cells + +The Syncfusion React Spreadsheet component allows you to apply borders to a cell or a range of cells. Borders help you separate sections, highlight data, or format tables clearly in your worksheet. You can apply borders in different styles, sizes, and colors based on your needs. + +## Border Types + +The Spreadsheet supports many types of borders. Each type adds a border to a specific side or area of the selected cells: + +| Types | Actions | +|-------|---------| +| Top Border | Specifies the top border of a cell or range of cells.| +| Left Border | Specifies the left border of a cell or range of cells.| +| Right Border | Specifies the right border of a cell or range of cells.| +| Bottom Border | Specifies the bottom border of a cell or range of cells.| +| No Border | Used to clear the border from a cell or range of cells.| +| All Border | Specifies all border of a cell or range of cells.| +| Horizontal Border | Specifies the top and bottom border of a cell or range of cells.| +| Vertical Border | Specifies the left and right border of a cell or range of cells.| +| Outside Border | Specifies the outside border of a range of cells.| +| Inside Border | Specifies the inside border of a range of cells.| + +## Customize Border Colors and Styles + +You can also change how the border looks by adjusting its size and style. The Spreadsheet supports the following options: + +| Types | Actions | +|-------|---------| +| Thin | Specifies the `1px` border size (default).| +| Medium | Specifies the `2px` border size.| +| Thick | Specifies the `3px` border size.| +| Solid | Used to create the `solid` border (default).| +| Dashed | Used to create the `dashed` border.| +| Dotted | Used to create the `dotted` border.| +| Double | Used to create the `double` border.| + +Borders can be applied in the following ways, + +- Using the `border`, `borderLeft`, `borderRight`, `borderBottom` properties, you can set the desired border to each cell at initial load. The [border](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/cellstylemodel#border) property is part of [CellStyleModel](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/cellstylemodel) and is applied via the cell's `style` object. +- Using the [setBorder](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/index-default#setborder) method, you can set various border options to a cell or range of cells. +- Selecting the border options from the ribbon toolbar. + +The following code sample shows how to apply borders in the Spreadsheet. + +{% tabs %} +{% highlight js tabtitle="app.jsx" %} +{% include code-snippet/spreadsheet/react/border-cs1/app/app.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="app.tsx" %} +{% include code-snippet/spreadsheet/react/border-cs1/app/app.tsx %} +{% endhighlight %} +{% highlight js tabtitle="datasource.jsx" %} +{% include code-snippet/spreadsheet/react/border-cs1/app/datasource.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="datasource.tsx" %} +{% include code-snippet/spreadsheet/react/border-cs1/app/datasource.tsx %} +{% endhighlight %} +{% endtabs %} + + {% previewsample "/document-processing/code-snippet/spreadsheet/react/border-cs1" %} + + ## Remove Borders + +To remove the border style on the target cells, use the UI "No Border" option in the ribbon. + +![Remove borders in spreadsheet](./images/spreadsheet_remove_borders.png) \ No newline at end of file diff --git a/Document-Processing/Excel/Spreadsheet/React/conditional-formatting.md b/Document-Processing/Excel/Spreadsheet/React/conditional-formatting.md new file mode 100644 index 0000000000..8d49a58efd --- /dev/null +++ b/Document-Processing/Excel/Spreadsheet/React/conditional-formatting.md @@ -0,0 +1,113 @@ +--- +layout: post +title: Conditional Formatting in React Spreadsheet component | Syncfusion +description: Conditional formatting rules, data bars, color scales and icon sets in Syncfusion React Spreadsheet. +control: Formatting +platform: document-processing +documentation: ug +--- + +# Conditional Formatting + +Conditional formatting helps you to format a cell or range of cells based on the conditions applied. You can enable or disable conditional formats by using the [`allowConditionalFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allowconditionalformat) property. + +> * The default value for the `allowConditionalFormat` property is `true`. + +## Apply Conditional Formatting + +You can apply conditional formatting by using one of the following ways, + +* Select the conditional formatting icon in the Ribbon toolbar under the Home Tab. +* Using the [`conditionalFormat()`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#conditionalformat) method to define the condition. +* Using the `conditionalFormats` in sheets model. + +Conditional formatting has the following types in the spreadsheet, + +## Highlight cells rules + +Highlight cells rules option in the conditional formatting enables you to highlight cells with a preset color depending on the cell's value. + +The following options can be given for the highlight cells rules as type, + +>* 'GreaterThan', 'LessThan', 'Between', 'EqualTo', 'ContainsText', 'DateOccur', 'Duplicate', 'Unique'. + +The following preset colors can be used for formatting styles, + +>* `"RedFT"` - Light Red Fill with Dark Red Text, +>* `"YellowFT"` - Yellow Fill with Dark Yellow Text, +>* `"GreenFT"` - Green Fill with Dark Green Text, +>* `"RedF"` - Red Fill, +>* `"RedT"` - Red Text. + +## Top bottom rules + +Top bottom rules option in the conditional formatting allows you to apply formatting to the cells that satisfy a statistical condition with other cells in the range. + +The following options can be given for the top bottom rules as type, + +>* 'Top10Items', 'Bottom10Items', 'Top10Percentage', 'Bottom10Percentage', 'BelowAverage', 'AboveAverage'. + +## Data Bars + +You can apply data bars to represent the data graphically inside a cell. The longest bar represents the highest value and the shorter bars represent the smaller values. + +The following options can be given for the data bars as type, + +>* 'BlueDataBar', 'GreenDataBar', 'RedDataBar', 'OrangeDataBar', 'LightBlueDataBar', 'PurpleDataBar'. + +## Color Scales + +Using color scales, you can format your cells with two or three colors, where different color shades represent the different cell values. In the Green-Yellow-Red(GYR) Color Scale, the cell that holds the minimum value is colored as red. The cell that holds the median is colored as yellow, and the cell that holds the maximum value is colored as green. All other cells are colored proportionally. + +The following options can be given for the color scales as type, + +>* 'GYRColorScale', 'RYGColorScale', 'GWRColorScale', 'RWGColorScale', 'BWRColorScale', 'RWBColorScale', 'WRColorScale', 'RWColorScale', 'GWColorScale', 'WGColorScale', 'GYColorScale', 'YGColorScale'. + +## Icon Sets + +Icon sets will help you to visually represent your data with icons. Every icon represents a range of values. In the Three Arrows(colored) icon, the green arrow icon represents the values greater than 67%, the yellow arrow icon represents the values between 33% to 67%, and the red arrow icon represents the values less than 33%. + +The following options can be given for the icon sets as type, + +>* 'ThreeArrows', 'ThreeArrowsGray', 'FourArrowsGray', 'FourArrows', 'FiveArrowsGray', 'FiveArrows', 'ThreeTrafficLights1', 'ThreeTrafficLights2', 'ThreeSigns', 'FourTrafficLights', 'FourRedToBlack', 'ThreeSymbols', 'ThreeSymbols2', 'ThreeFlags', 'FourRating', 'FiveQuarters', 'FiveRating', 'ThreeTriangles', 'ThreeStars', 'FiveBoxes'. + +## Custom Format + +Using the custom format for conditional formatting you can set cell styles like color, background color, font style, font weight, and underline. + +In the MAY and JUN columns, we have applied conditional formatting custom format. + +>* In the Conditional format, custom format supported for Highlight cell rules and Top bottom rules. + +## Clear Rules + +You can clear the defined rules by using one of the following ways, + +* Using the “Clear Rules” option in the Conditional Formatting button of HOME Tab in the ribbon to clear the rule from selected cells. +* Using the [`clearConditionalFormat()`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#clearconditionalformat) method to clear the defined rules. + +{% tabs %} +{% highlight js tabtitle="app.jsx" %} +{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/app.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="app.tsx" %} +{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/app.tsx %} +{% endhighlight %} +{% highlight js tabtitle="datasource.jsx" %} +{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/datasource.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="datasource.tsx" %} +{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/datasource.tsx %} +{% endhighlight %} +{% endtabs %} + + {% previewsample "/document-processing/code-snippet/spreadsheet/react/conditional-formatting-cs1" %} + +## Limitations of Conditional formatting + +The following features have some limitations in Conditional Formatting: + +* Insert row/column between the conditional formatting. +* Conditional formatting with formula support. +* Copy and paste the conditional formatting applied cells. +* Custom rule support. \ No newline at end of file diff --git a/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md b/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md new file mode 100644 index 0000000000..414f2961ef --- /dev/null +++ b/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md @@ -0,0 +1,136 @@ +--- +layout: post +title: Custom & Culture Number Formats | Syncfusion React Spreadsheet +description: Custom number formats and culture-aware formats in Syncfusion React Spreadsheet. +control: Formatting +platform: document-processing +documentation: ug +--- + +## Custom Number Formatting + +Spreadsheet supports custom number formats to display your data as numbers, dates, times, percentages, and currency values. If the pre-defined number formats do not meet your needs, you can set your own custom formats using custom number formats dialog or `numberFormat` method. + +The different types of custom number format populated in the custom number format dialog are, + +| Type | Format Code | Format ID | +|-------|---------|---------| +| General(default) | NA | 0 | +| Number | `0` | 1 | +| Number | `0.00` | 2 | +| Number | `#,##0` | 3 | +| Number | `#,##0.00` | 4 | +| Number | `#,##0_);(#,##0)` | 37 | +| Number | `#,##0_);[Red](#,##0)` | 38 | +| Number | `#,##0.00_);(#,##0.00)` | 39 | +| Number | `#,##0.00_);[Red](#,##0.00)` | 40 | +| Currency | `$#,##0_);($#,##0)` | 5 | +| Currency | `$#,##0_);[Red]($#,##0)` | 6 | +| Currency | `$#,##0.00_);($#,##0.00)` | 7 | +| Currency | `$#,##0.00_);[Red]($#,##0.00)` | 8 | +| Percentage | `0%` | 9 | +| Percentage | `0.00%` | 10 | +| Scientific |`0.00E+00` | 11 | +| Scientific |`##0.0E+0` | 48 | +| Fraction | `# ?/?` | 12 | +| Fraction | `# ??/??` | 13 | +| ShortDate | `m/d/yyyy` | 14 | +| Custom | `d-mmm-yy` | 15 | +| Custom | `d-mmm` | 16 | +| Custom | `mmm-yy` | 17 | +| Custom | `h:mm AM/PM` | 18 | +| Custom | `h:mm:ss AM/PM` | 19 | +| Custom | `h:mm` | 20 | +| Custom | `h:mm:ss` | 21 | +| Custom | `m/d/yyyy h:mm` | 22 | +| Custom | `mm:ss` | 45 | +| Custom | `mm:ss.0` | 47 | +| Text | `@` | 49 | +| Custom | `[h]:mm:ss` | 46 | +| Accounting | `_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)` | 42 | +| Accounting | `_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)` | 41 | +| Accounting | `_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)` | 44 | +| Accounting | `_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)` | 43 | + +Custom Number formatting can be applied in following ways, +* Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#numberformat) method, you can set your own custom number format to a cell or range of cells. +* Selecting the custom number format option from custom number formats dialog or type your own format in dialog input and then click apply button. It will apply the custom format for selected cells. + +The following code example shows the number formatting in cell data. + +{% tabs %} +{% highlight js tabtitle="app.jsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/app.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="app.tsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/app.tsx %} +{% endhighlight %} +{% highlight js tabtitle="datasource.jsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/datasource.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="datasource.tsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/datasource.tsx %} +{% endhighlight %} +{% endtabs %} + + {% previewsample "/document-processing/code-snippet/spreadsheet/react/numberformat-cs1" %} + +## Configure culture-based custom format + +Previously, the custom format dialog always displayed formats using the English settings (group separator, decimal separator, and currency symbol were not updated based on the applied culture). Starting from version `27.1.*`, the custom format dialog will now display formats according to the applied culture. You can select a culture-based number format from the dialog or enter your own format using the culture-specific decimal separator, group separator, and currency symbol. Then, click "Apply" to apply the culture-specific custom format to the selected cells. + +The spreadsheet allows customization of formats in the custom format dialog using the `configureLocalizedFormat` method. In this method, you need to pass a collection containing the default number format IDs and their corresponding format codes as arguments. Based on this collection, the custom format dialog will display the customized formats. You can refer to the [default number format IDs](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.numberingformat?view=openxml-2.8.1) from the Excel built-in number format reference. + +Compared to Excel, the date, time, currency, and accounting formats vary across different cultures. For example, when an Excel file with the date format `'m/d/yyyy'` is imported in the `en-US` culture, the spreadsheet displays the date in that format. However, when the same file is imported in the German culture, the date format changes to `'dd.MM.yyyy'`, which is the default for that region. The default number format ID for the date is 14. To customize the date format based on the culture, you should map the default number format ID to the appropriate culture-specific format code, like this: `{ id: 14, code: 'dd.MM.yyyy' }` in the `configureLocalizedFormat` method. + +> The format code should use the default decimal separator (.) and group separator (,). + +The code below illustrates how culture-based format codes are mapped to their corresponding number format ID for the `German` culture. + +```js +import { configureLocalizedFormat } from '@syncfusion/ej2-react-spreadsheet'; + +const deLocaleFormats = [ + { id: 14, code: 'dd.MM.yyyy' }, + { id: 15, code: 'dd. MMM yy' }, + { id: 16, code: 'dd. MMM' }, + { id: 17, code: 'MMM yy' }, + { id: 20, code: 'hh:mm' }, + { id: 21, code: 'hh:mm:ss' }, + { id: 22, code: 'dd.MM.yyyy hh:mm' }, + { id: 37, code: '#,##0;-#,##0' }, + { id: 38, code: '#,##0;[Red]-#,##0' }, + { id: 39, code: '#,##0.00;-#,##0.00' }, + { id: 40, code: '#,##0.00;[Red]-#,##0.00' }, + { id: 5, code: '#,##0 "€";-#,##0 "€"' }, + { id: 6, code: '#,##0 "€";[Red]-#,##0 "€"' }, + { id: 7, code: '#,##0.00 "€";-#,##0.00 "€"' }, + { id: 8, code: '#,##0.00 "€";[Red]-#,##0.00 "€"' }, + { id: 41, code: '_-* #,##0_-;-* #,##0_-;_-* "-"_-;_-@_-' }, + { id: 42, code: '_-* #,##0 "€"_-;-* #,##0 "€"_-;_-* "-" "€"_-;_-@_-' }, + { id: 43, code: '_-* #,##0.00_-;-* #,##0.00_-;_-* "-"??_-;_-@_-' }, + { id: 44, code: '_-* #,##0.00 "€"_-;-* #,##0.00 "€"_-;_-* "-"?? "€"_-;_-@_-' } +]; + +// Mapping culture-based number formats for the "de" culture: The "spreadsheetRef.current" parameter is an instance of the spreadsheet component, and the "deLocaleFormats" parameter is an array containing format codes and their corresponding format IDs for the "de" culture. +configureLocalizedFormat(spreadsheetRef.current, deLocaleFormats); +``` + +The following code example demonstrates how to configure culture-based formats for different cultures in the spreadsheet. + +{% tabs %} +{% highlight js tabtitle="app.jsx" %} +{% include code-snippet/spreadsheet/react/globalization-cs1/app/app.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="app.tsx" %} +{% include code-snippet/spreadsheet/react/globalization-cs1/app/app.tsx %} +{% endhighlight %} +{% highlight js tabtitle="datasource.jsx" %} +{% include code-snippet/spreadsheet/react/globalization-cs1/app/datasource.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="datasource.tsx" %} +{% include code-snippet/spreadsheet/react/globalization-cs1/app/datasource.tsx %} +{% endhighlight %} +{% endtabs %} + +{% previewsample "/document-processing/code-snippet/spreadsheet/react/globalization-cs1" %} diff --git a/Document-Processing/Excel/Spreadsheet/React/formatting.md b/Document-Processing/Excel/Spreadsheet/React/formatting.md index 2595d8f999..4070767444 100644 --- a/Document-Processing/Excel/Spreadsheet/React/formatting.md +++ b/Document-Processing/Excel/Spreadsheet/React/formatting.md @@ -9,362 +9,31 @@ documentation: ug # Formatting in React Spreadsheet component -Formatting options make your data easier to view and understand. The different types of formatting options in the Spreadsheet are, -* Number Formatting -* Text Formatting -* Cell Formatting +Formatting options make your data easier to view and understand. The different types of formatting options in the Spreadsheet are: -To get start quickly with Formatting, you can check on this video: +- Number Formatting +- Text Formatting +- Cell Formatting -{% youtube "https://www.youtube.com/watch?v=AyHLgzNq6_w" %} - -## Number Formatting - -Number formatting provides a type for your data in the Spreadsheet. Use the [`allowNumberFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allownumberformatting) property to enable or disable the number formatting option in the Spreadsheet. The different types of number formatting supported in Spreadsheet are, - -| Types | Format Code | Format ID | -|---------|---------|---------| -| General(default) | NA | 0 | -| Number | `0.00` | 2 | -| Currency | `$#,##0.00` | NA | -| Accounting | `_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)` | 44 | -| ShortDate | `m/d/yyyy` | 14 | -| LongDate | `dddd, mmmm dd, yyyy` | NA | -| Time | `h:mm:ss AM/PM` | NA | -| Percentage | `0.00%` | 10 | -| Fraction | `# ?/?` | 12 | -| Scientific |`0.00E+00` | 11 | -| Text | `@` | 49 | - -Number formatting can be applied in following ways, -* Using the `format` property in `cell`, you can set the desired format to each cell at initial load. -* Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#numberformat) method, you can set the number format to a cell or range of cells. -* Selecting the number format option from ribbon toolbar. - -### Custom Number Formatting - -Spreadsheet supports custom number formats to display your data as numbers, dates, times, percentages, and currency values. If the pre-defined number formats do not meet your needs, you can set your own custom formats using custom number formats dialog or `numberFormat` method. - -The different types of custom number format populated in the custom number format dialog are, - -| Type | Format Code | Format ID | -|-------|---------|---------| -| General(default) | NA | 0 | -| Number | `0` | 1 | -| Number | `0.00` | 2 | -| Number | `#,##0` | 3 | -| Number | `#,##0.00` | 4 | -| Number | `#,##0_);(#,##0)` | 37 | -| Number | `#,##0_);[Red](#,##0)` | 38 | -| Number | `#,##0.00_);(#,##0.00)` | 39 | -| Number | `#,##0.00_);[Red](#,##0.00)` | 40 | -| Currency | `$#,##0_);($#,##0)` | 5 | -| Currency | `$#,##0_);[Red]($#,##0)` | 6 | -| Currency | `$#,##0.00_);($#,##0.00)` | 7 | -| Currency | `$#,##0.00_);[Red]($#,##0.00)` | 8 | -| Percentage | `0%` | 9 | -| Percentage | `0.00%` | 10 | -| Scientific |`0.00E+00` | 11 | -| Scientific |`##0.0E+0` | 48 | -| Fraction | `# ?/?` | 12 | -| Fraction | `# ??/??` | 13 | -| ShortDate | `m/d/yyyy` | 14 | -| Custom | `d-mmm-yy` | 15 | -| Custom | `d-mmm` | 16 | -| Custom | `mmm-yy` | 17 | -| Custom | `h:mm AM/PM` | 18 | -| Custom | `h:mm:ss AM/PM` | 19 | -| Custom | `h:mm` | 20 | -| Custom | `h:mm:ss` | 21 | -| Custom | `m/d/yyyy h:mm` | 22 | -| Custom | `mm:ss` | 45 | -| Custom | `mm:ss.0` | 47 | -| Text | `@` | 49 | -| Custom | `[h]:mm:ss` | 46 | -| Accounting | `_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)` | 42 | -| Accounting | `_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)` | 41 | -| Accounting | `_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)` | 44 | -| Accounting | `_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)` | 43 | - -Custom Number formatting can be applied in following ways, -* Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#numberformat) method, you can set your own custom number format to a cell or range of cells. -* Selecting the custom number format option from custom number formats dialog or type your own format in dialog input and then click apply button. It will apply the custom format for selected cells. - -The following code example shows the number formatting in cell data. - -{% tabs %} -{% highlight js tabtitle="app.jsx" %} -{% include code-snippet/spreadsheet/react/numberformat-cs1/app/app.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="app.tsx" %} -{% include code-snippet/spreadsheet/react/numberformat-cs1/app/app.tsx %} -{% endhighlight %} -{% highlight js tabtitle="datasource.jsx" %} -{% include code-snippet/spreadsheet/react/numberformat-cs1/app/datasource.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="datasource.tsx" %} -{% include code-snippet/spreadsheet/react/numberformat-cs1/app/datasource.tsx %} -{% endhighlight %} -{% endtabs %} - - {% previewsample "/document-processing/code-snippet/spreadsheet/react/numberformat-cs1" %} - -## Configure culture-based custom format - -Previously, the custom format dialog always displayed formats using the English settings (group separator, decimal separator, and currency symbol were not updated based on the applied culture). Starting from version `27.1.*`, the custom format dialog will now display formats according to the applied culture. You can select a culture-based number format from the dialog or enter your own format using the culture-specific decimal separator, group separator, and currency symbol. Then, click "Apply" to apply the culture-specific custom format to the selected cells. - -The spreadsheet allows customization of formats in the custom format dialog using the `configureLocalizedFormat` method. In this method, you need to pass a collection containing the default number format IDs and their corresponding format codes as arguments. Based on this collection, the custom format dialog will display the customized formats. You can refer to the [default number format IDs](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.numberingformat?view=openxml-2.8.1) from the Excel built-in number format reference. - -Compared to Excel, the date, time, currency, and accounting formats vary across different cultures. For example, when an Excel file with the date format `'m/d/yyyy'` is imported in the `en-US` culture, the spreadsheet displays the date in that format. However, when the same file is imported in the German culture, the date format changes to `'dd.MM.yyyy'`, which is the default for that region. The default number format ID for the date is 14. To customize the date format based on the culture, you should map the default number format ID to the appropriate culture-specific format code, like this: `{ id: 14, code: 'dd.MM.yyyy' }` in the `configureLocalizedFormat` method. - -> The format code should use the default decimal separator (.) and group separator (,). - -The code below illustrates how culture-based format codes are mapped to their corresponding number format ID for the `German` culture. - -```js -import { configureLocalizedFormat } from '@syncfusion/ej2-react-spreadsheet'; - -const deLocaleFormats = [ - { id: 14, code: 'dd.MM.yyyy' }, - { id: 15, code: 'dd. MMM yy' }, - { id: 16, code: 'dd. MMM' }, - { id: 17, code: 'MMM yy' }, - { id: 20, code: 'hh:mm' }, - { id: 21, code: 'hh:mm:ss' }, - { id: 22, code: 'dd.MM.yyyy hh:mm' }, - { id: 37, code: '#,##0;-#,##0' }, - { id: 38, code: '#,##0;[Red]-#,##0' }, - { id: 39, code: '#,##0.00;-#,##0.00' }, - { id: 40, code: '#,##0.00;[Red]-#,##0.00' }, - { id: 5, code: '#,##0 "€";-#,##0 "€"' }, - { id: 6, code: '#,##0 "€";[Red]-#,##0 "€"' }, - { id: 7, code: '#,##0.00 "€";-#,##0.00 "€"' }, - { id: 8, code: '#,##0.00 "€";[Red]-#,##0.00 "€"' }, - { id: 41, code: '_-* #,##0_-;-* #,##0_-;_-* "-"_-;_-@_-' }, - { id: 42, code: '_-* #,##0 "€"_-;-* #,##0 "€"_-;_-* "-" "€"_-;_-@_-' }, - { id: 43, code: '_-* #,##0.00_-;-* #,##0.00_-;_-* "-"??_-;_-@_-' }, - { id: 44, code: '_-* #,##0.00 "€"_-;-* #,##0.00 "€"_-;_-* "-"?? "€"_-;_-@_-' } -]; - -// Mapping culture-based number formats for the "de" culture: The "spreadsheetRef.current" parameter is an instance of the spreadsheet component, and the "deLocaleFormats" parameter is an array containing format codes and their corresponding format IDs for the "de" culture. -configureLocalizedFormat(spreadsheetRef.current, deLocaleFormats); -``` - -The following code example demonstrates how to configure culture-based formats for different cultures in the spreadsheet. - -{% tabs %} -{% highlight js tabtitle="app.jsx" %} -{% include code-snippet/spreadsheet/react/globalization-cs1/app/app.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="app.tsx" %} -{% include code-snippet/spreadsheet/react/globalization-cs1/app/app.tsx %} -{% endhighlight %} -{% highlight js tabtitle="datasource.jsx" %} -{% include code-snippet/spreadsheet/react/globalization-cs1/app/datasource.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="datasource.tsx" %} -{% include code-snippet/spreadsheet/react/globalization-cs1/app/datasource.tsx %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "/document-processing/code-snippet/spreadsheet/react/globalization-cs1" %} - -## Text and cell formatting - -Text and cell formatting enhances the look and feel of your cell. It helps to highlight a particular cell or range of cells from a whole workbook. You can apply formats like font size, font family, font color, text alignment, border etc. to a cell or range of cells. Use the [`allowCellFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allowcellformatting) property to enable or disable the text and cell formatting option in Spreadsheet. You can set the formats in following ways, -* Using the `style` property, you can set formats to each cell at initial load. -* Using the [`cellFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#cellformat) method, you can set formats to a cell or range of cells. -* You can also apply by clicking the desired format option from the ribbon toolbar. - -### Fonts - -Various font formats supported in the spreadsheet are font-family, font-size, bold, italic, strike-through, underline and font color. - -### Text Alignment - -You can align text in a cell either vertically or horizontally using the `textAlign` and `verticalAlign` property. - -### Indents - -To enhance the appearance of text in a cell, you can change the indentation of a cell content using `textIndent` property. - -### Fill color - -To highlight cell or range of cells from whole workbook you can apply background color for a cell using `backgroundColor` property. - -### Borders - -You can add borders around a cell or range of cells to define a section of worksheet or a table. The different types of border options available in the spreadsheet are, - -| Types | Actions | -|-------|---------| -| Top Border | Specifies the top border of a cell or range of cells.| -| Left Border | Specifies the left border of a cell or range of cells.| -| Right Border | Specifies the right border of a cell or range of cells.| -| Bottom Border | Specifies the bottom border of a cell or range of cells.| -| No Border | Used to clear the border from a cell or range of cells.| -| All Border | Specifies all border of a cell or range of cells.| -| Horizontal Border | Specifies the top and bottom border of a cell or range of cells.| -| Vertical Border | Specifies the left and right border of a cell or range of cells.| -| Outside Border | Specifies the outside border of a range of cells.| -| Inside Border | Specifies the inside border of a range of cells.| - -You can also change the color, size, and style of the border. The size and style supported in the spreadsheet are, - -| Types | Actions | -|-------|---------| -| Thin | Specifies the `1px` border size (default).| -| Medium | Specifies the `2px` border size.| -| Thick | Specifies the `3px` border size.| -| Solid | Used to create the `solid` border (default).| -| Dashed | Used to create the `dashed` border.| -| Dotted | Used to create the `dotted` border.| -| Double | Used to create the `double` border.| - -Borders can be applied in the following ways, -* Using the `border`, `borderLeft`, `borderRight`, `borderBottom` properties, you can set the desired border to each cell at initial load. -* Using the `setBorder` method, you can set various border options to a cell or range of cells. -* Selecting the border options from ribbon toolbar. - -The following code example shows the style formatting in text and cells of the spreadsheet. - -{% tabs %} -{% highlight js tabtitle="app.jsx" %} -{% include code-snippet/spreadsheet/react/cellformat-cs1/app/app.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="app.tsx" %} -{% include code-snippet/spreadsheet/react/cellformat-cs1/app/app.tsx %} -{% endhighlight %} -{% highlight js tabtitle="datasource.jsx" %} -{% include code-snippet/spreadsheet/react/cellformat-cs1/app/datasource.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="datasource.tsx" %} -{% include code-snippet/spreadsheet/react/cellformat-cs1/app/datasource.tsx %} -{% endhighlight %} -{% endtabs %} +To get started quickly with Formatting, you can check this video: - {% previewsample "/document-processing/code-snippet/spreadsheet/react/cellformat-cs1" %} - -### Limitations of Formatting - -The following features are not supported in Formatting: - -* Insert row/column between the formatting applied cells. -* Formatting support for row/column. - -## Conditional Formatting - -Conditional formatting helps you to format a cell or range of cells based on the conditions applied. You can enable or disable conditional formats by using the [`allowConditionalFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allowconditionalformat) property. - -> * The default value for the `allowConditionalFormat` property is `true`. - -### Apply Conditional Formatting - -You can apply conditional formatting by using one of the following ways, - -* Select the conditional formatting icon in the Ribbon toolbar under the Home Tab. -* Using the [`conditionalFormat()`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#conditionalformat) method to define the condition. -* Using the `conditionalFormats` in sheets model. - -Conditional formatting has the following types in the spreadsheet, - -### Highlight cells rules - -Highlight cells rules option in the conditional formatting enables you to highlight cells with a preset color depending on the cell's value. - -The following options can be given for the highlight cells rules as type, - ->* 'GreaterThan', 'LessThan', 'Between', 'EqualTo', 'ContainsText', 'DateOccur', 'Duplicate', 'Unique'. - -The following preset colors can be used for formatting styles, - ->* `"RedFT"` - Light Red Fill with Dark Red Text, ->* `"YellowFT"` - Yellow Fill with Dark Yellow Text, ->* `"GreenFT"` - Green Fill with Dark Green Text, ->* `"RedF"` - Red Fill, ->* `"RedT"` - Red Text. - -### Top bottom rules - -Top bottom rules option in the conditional formatting allows you to apply formatting to the cells that satisfy a statistical condition with other cells in the range. - -The following options can be given for the top bottom rules as type, - ->* 'Top10Items', 'Bottom10Items', 'Top10Percentage', 'Bottom10Percentage', 'BelowAverage', 'AboveAverage'. - -### Data Bars - -You can apply data bars to represent the data graphically inside a cell. The longest bar represents the highest value and the shorter bars represent the smaller values. - -The following options can be given for the data bars as type, - ->* 'BlueDataBar', 'GreenDataBar', 'RedDataBar', 'OrangeDataBar', 'LightBlueDataBar', 'PurpleDataBar'. - -### Color Scales - -Using color scales, you can format your cells with two or three colors, where different color shades represent the different cell values. In the Green-Yellow-Red(GYR) Color Scale, the cell that holds the minimum value is colored as red. The cell that holds the median is colored as yellow, and the cell that holds the maximum value is colored as green. All other cells are colored proportionally. - -The following options can be given for the color scales as type, - ->* 'GYRColorScale', 'RYGColorScale', 'GWRColorScale', 'RWGColorScale', 'BWRColorScale', 'RWBColorScale', 'WRColorScale', 'RWColorScale', 'GWColorScale', 'WGColorScale', 'GYColorScale', 'YGColorScale'. - -### Icon Sets - -Icon sets will help you to visually represent your data with icons. Every icon represents a range of values. In the Three Arrows(colored) icon, the green arrow icon represents the values greater than 67%, the yellow arrow icon represents the values between 33% to 67%, and the red arrow icon represents the values less than 33%. - -The following options can be given for the icon sets as type, - ->* 'ThreeArrows', 'ThreeArrowsGray', 'FourArrowsGray', 'FourArrows', 'FiveArrowsGray', 'FiveArrows', 'ThreeTrafficLights1', 'ThreeTrafficLights2', 'ThreeSigns', 'FourTrafficLights', 'FourRedToBlack', 'ThreeSymbols', 'ThreeSymbols2', 'ThreeFlags', 'FourRating', 'FiveQuarters', 'FiveRating', 'ThreeTriangles', 'ThreeStars', 'FiveBoxes'. - -### Custom Format - -Using the custom format for conditional formatting you can set cell styles like color, background color, font style, font weight, and underline. - -In the MAY and JUN columns, we have applied conditional formatting custom format. - ->* In the Conditional format, custom format supported for Highlight cell rules and Top bottom rules. - -### Clear Rules - -You can clear the defined rules by using one of the following ways, - -* Using the “Clear Rules” option in the Conditional Formatting button of HOME Tab in the ribbon to clear the rule from selected cells. -* Using the [`clearConditionalFormat()`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#clearconditionalformat) method to clear the defined rules. - -{% tabs %} -{% highlight js tabtitle="app.jsx" %} -{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/app.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="app.tsx" %} -{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/app.tsx %} -{% endhighlight %} -{% highlight js tabtitle="datasource.jsx" %} -{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/datasource.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="datasource.tsx" %} -{% include code-snippet/spreadsheet/react/conditional-formatting-cs1/app/datasource.tsx %} -{% endhighlight %} -{% endtabs %} - - {% previewsample "/document-processing/code-snippet/spreadsheet/react/conditional-formatting-cs1" %} - -### Limitations of Conditional formatting +{% youtube "https://www.youtube.com/watch?v=AyHLgzNq6_w" %} -The following features have some limitations in Conditional Formatting: +Below are the topic pages for Formatting. Select a topic to view details and examples: -* Insert row/column between the conditional formatting. -* Conditional formatting with formula support. -* Copy and paste the conditional formatting applied cells. -* Custom rule support. +- [Number Formatting](./number-formatting) +- [Custom & Culture Formats](./custom-number-formatting) +- [Text & Cell Formatting](./text-cell-formatting) +- [Conditional Formatting](./conditional-formatting) ## Note -You can refer to our [React Spreadsheet](https://www.syncfusion.com/spreadsheet-editor-sdk/react-spreadsheet-editor) feature tour page for its groundbreaking feature representations. You can also explore our [React Spreadsheet example](https://www.syncfusion.com/spreadsheet-editor-sdk/react-spreadsheet-editor) to knows how to present and manipulate data. +You can refer to our [React Spreadsheet](https://www.syncfusion.com/spreadsheet-editor-sdk/react-spreadsheet-editor) feature tour page for feature highlights. You can also explore our [React Spreadsheet example](https://www.syncfusion.com/spreadsheet-editor-sdk/react-spreadsheet-editor) to learn how to present and manipulate data. ## See Also -* [Rows and columns](./rows-and-columns) -* [Hyperlink](./link) -* [Sorting](./sort) -* [Filtering](./filter) -* [`Ribbon customization`](./ribbon#ribbon-customization) \ No newline at end of file +- [Rows and columns](./rows-and-columns) +- [Hyperlink](./link) +- [Sorting](./sort) +- [Filtering](./filter) +- [`Ribbon customization`](./ribbon#ribbon-customization) diff --git a/Document-Processing/Excel/Spreadsheet/React/images/spreadsheet-duplicate.png b/Document-Processing/Excel/Spreadsheet/React/images/spreadsheet-duplicate.png new file mode 100644 index 0000000000000000000000000000000000000000..ac119ef8811ca34f91c80c3fbcdf45b941eafb5d GIT binary patch literal 29575 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

    60H;D@zmH$_pFh1uv` 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%0Ax z?s%odD|R@RWsMieN7Ptkbloh*<~o;~cmK{!!%zBNK#CbN3FOgA^lak}Lm-B9b#AgA zPmZa|-X}8fbm+WVne38+LbYpdOt+0c+Hqr<(uN;*#bd2GBzrd<-ZN1VTP6O$-*~TI zT?^kb)CrRe^WR2w+>ZKABYxDxQFc5O@e7`_XMxCoHqSPT)9I_6IZ_6^G!w=j3xdc5 zJKRPPFnSOr;_N;oh`iAcPyy10?}s!GhIeK_FM9C&k|NP;gt0FYbugjD!a5%=a^L!g z2x3B_vrJFH>MOwQldGAop}q5+isn%ppk=5k@^YJ-1`dAx(sV`5Djd&6Mh?nScd*)b&w1)^rT^K%98Ut zIqWg(DN|r}UVvEAqyYVzk)-(w8zs7qZYP4?cj9v@{ajZhNiVt#p`Dg^YP# z{zG!RMue|6P(EiD$F%|d0utm^0R&0S=GY~v>hSiJeB6V=purbGA|$f=dAij&tT{=* z)jh}iwz2hzxNLKipC_l9WDk_j&!Z#hd3-8`M;@u@)6Yqc`tBrXL!B$Yijr8D`!C|#I-*uD0x2N@0@VUhCWrk7YhcZpdJn37uJ)m z3jCCUE;~cbn(>FkV{pX+KM8du-a}gYe}B-2XGq^J=WmwbN%&I=foBh1Q~|+q|rytdw4^~X! z&TU?%wD#w!Lq9-84d`G<*h~Y3?TsA{iWC#+Dii<$#oqoX6Ws~CT)XB=ISt-jI{>{Y zJB%Lx{$XdbB%o!~^j!$@F%V^4N?{>KlLurlVud@^t*)mw_aad8rCJyg#oWz%IMZWz z@R-Jy1Ywlx0_4v!p`rwB6s>P`{WtG*_$@U==qtE zI^u7l{)gg);bI9gKlI~SqHP4wdtisXQRa@_a93K$8|YQ&^8uLUBq(e(jn%$>>l54! z5vn3tvhaQh`A=E#&Y#WKL1lHH4l{NrG6aKS*3chX6lzp>x!m?$WeujSE0-N*e!g+; TlR9)&9igpmpjM=E^U41QvKN(f literal 0 HcmV?d00001 diff --git a/Document-Processing/Excel/Spreadsheet/React/images/spreadsheet_remove_borders.png b/Document-Processing/Excel/Spreadsheet/React/images/spreadsheet_remove_borders.png new file mode 100644 index 0000000000000000000000000000000000000000..9687f16c782eff9f37bb2cd5cc6d0bfeb5a03459 GIT binary patch literal 34634 zcmbSxXH=72(=Jtt(n0Ac3MfIE(yIj#r3jKxZaM-<>`no6->hrFVgF1ED1J4$?s+ zp*QJ7L_m5w@p<0&`_}n+PS(mw_S}2V%r3dEnaO_tLQ|E7nw^@6h=@k*>0=!tB65I; zhy+hbN|20ge5odU5WDKAJ|rp~WEEq{NwguPRVk;881K#>a zR5=N|y1LuLj2EvO#jEn(G0uGi>_V|JB zo5`PJ4;)iPS;Mzi94QkkxRTr$dC8)pO;AO>2N!Q5LB3>|;78r{g(H<#&hqW`crOxy zhW~w)Y+ojFGA#m0h^ATW$%!VZiKN zGemr!jO)5zRmJkg2uPF`z|?^pe=TxJeWBL6$CyODnD#w69oVyYB>XBjbsz|xbTq-+ zbgzB=rN`Cc3kb;@H{hk-u4%o}s_Sj{MNMDN6N%j+Fh8?k{T9pjkH0d$TS3;H*cLqo zYpbg*tENk2Q)m)*2F9O)?#`zQtCr18it%I8vOQB`VZ31p28A1L+6=o^B}NW#Kj02a z<3!C^iPTb-{r8Y3^$jSzEKeqIa4{|xJRA0amHK%cn5Y9~8mJ1BxDhhiE4z7d(KsPO zGlL^FLL0wf{HW}_`ADhp&EC5E^$k9%n|y|9@VlR-Jm3Cuj$>k=O1IE8NX_qi!A`EC za?y%AKC4jjGx{YP6gRX3njsZ~i()1s$P0+7Xy4{B6$vBwR^LV0y+&|FKkGa3)YmL< z{w~g+`Mqhct_3o(L@0@b1yhw-U-iDj7Vljd0F^-8-^?34=cO4dK@^i9mfo4Ni zZIzeJ;&I?B2t&L@-HP-CYxTlj;HTj)7Ox{C&P(QsZvsQ|WwQ8;wJka zAiXnqK7r4!0-;zhzxXW$z9Ta+Q7S*TF-Ibf&q-3giF1zRUs}YZJDz^$iaU-5cOJbd z4ArEtaUG|w)UO@u?BYeS3Lxj|W*K*|OADf2)6W!tuPDD-x<11^ELv7xC}#Kj^a0FH z=pr;HXU+ymY1CObD;#B5GjaP&dZ`9>h(mHNRxZ-;+w$?dr%TG$l`d|UWDt#SED&Ly zwKk*gE>a78K7(}!1Tc&W^5QeVXH`FSn#X!lh+mq?A>1poQfan zm0#gQ9-()c)H0t_wsK}gw7(9BUNR*&J*QSt$^4l{<5OJ27*NLct&aP|NXd-l&L!PJ zmeAeli;GoBw)?lW1-PdtX9j`Pf{z0H%qCyeet&l*naO$Vgv=HI3ln=W&qlvI#(0oj zRmJe~lsaHHf@-~wbyqLZyTSQ1lM#j5+(}hHW9){SsP^Z(tug}F!;tFEQOX)}ZXUV^ zj587QEx7|^CpKY1OV%kGub$aF*Dk74DM_oY+a5Fjs3|kkD_Z7+7iPK2TAP#0xeIzO z!di^i-AUZ1i&=eN8Q#~I+LejHlQI8Ro))ZJHq-A+opsarOlfT`{9HhT!j%b=;<5G? zqPdaEdM(VLLX((a>B=smdVNT$n4VeibtiWKqZm43?GpcYp%phs`&%@i(Zq5o=Yfba zSKU{Tf6ki?6LGhc>+q#~91~H|=$Gp7*6hPv$J)dgLdQfmM-%^? zAx85nDBWw<-^Ov782|Glv*e?zFS!`#Duvt)?;&*^O`exSXVNAMFKc4N`!7$+LUzoe zg6u1suq8}~^vTXh6M=Hr)ZDvL!y}yZb7FxLt$XW*F>XhPvcyy1^-A3{ZM}XG!wTt5 ztwF2LJ`_$*OgQM}tS6lTfq>^F6_uj0TT+KX85 z%5LwF9Wnh-wyS|ze(>BY3ibTlXU0rVb4Ri#ZGV|7Nk|6MwXE)KG}q94BPtkv6V&2O z3oqQ)3~<-Wa;Uy^_{@y;oKq;woYe!;E_$Ut(VR8R93y_Ey&PZ*Gam=9{8vag9#`5O ztO!s45&nezcgR1&qp$UQ{zH!lUCM!pzk~jHKKTEnXjfupBXYHsYnk@KeqiU@lGtQ9 zU;w3SbErPVsebo4nA-m3i}AnfJ3S7T2zuZ#p7{E?qyxvJGT(!VzY<9Oo}`~o({eM; z22)Wy4*rA@M2XN&E^AB$!70;?-z~f`zA%>hz5M6U4vg2L&cUJdr7yF!C9$T}lEL0SRe{Msi4!%BJLJxo!bDJk+!@|BFvrnf5H zb|hw~#Sxn@FG`P|eR{I`(adW-lIc8cbCE#qqmnrNE|mx?IA(BP(#y2!rr=bqM6aJ@ zQ^juZ z*=jaTS8+R!d0)Ts;$`tA~ytXNJDq6koprHOFcYQD)jG@2o-cL>RgWDB5 z`S|wiRV_Dsd3PjdhU!`@%k?dpw`S5K6Y^Nh(4LTUQ*`+I*Cag7!ErGF zwgwc)W3ODT5WM=plC;8(5#t2$Dm@7b;x4QQ*3pJTR=!nKDDx|xTEtp*4`|*0*o}Ip z$9TX$%J3Ukt7ot73Ca(7Ab)dQVy!Vb+THj-Vi5L;yG3fM!f0diahhYqffc28;FSLu zIKvgM;a$>RAU6qClI(&ycLZAR){AG?tI4f?_`N{;NQ?4*agoH}*>lE)71&yFpr#Rj zMEVcliUUxO_2W8aFm~N{nv_g<%#P-TuF z(}t11s6gDodSG3BA_7?rSdm~kGNBC*iM9W9wOTARo6nf)J5&o?NMR8$w|jOfZko#0 zJuO*LY15GaXnMC+c;H$wcDq;giy%?#!HpPCtHRI^U#G;w`!rJD>rUyZ%zAnteXGCO zxo?%PYi{Cp=*#x43KOe`+V&mD)rt~h9u5}{q}-?&-MET*a+uI{cX=XuvE~AS8H_M$ zo}SojbMilE+b=7|dO!Qxb;X*!FQZ@FJQ{0i2!;SONx-^mdPZOG$&xZvmIp+B zHYrvJMw28peaurtBWYyCvLt>rP0o;;wDsVV6U6ORW1--PU89&4Zg%0nW%! zM^*4oV(da@ks}?GdOVdu!681jPh)syS+)M#NY2eM)3MQK#dd&a%`d_X+Ub5eDvf;M zcYsqpeFjzmt*qElyXzIB&+4FM7k8W-KbUKCQUH&lg&t6Ri^;yWjHz3r37e8hw`!o_ zT^3B=K{+YGDny0(;RH)%9pH*k!WUw#HER;10Q|E^Oswy<%qcOa?#YCQE6UL)7^LF+LDlk#ia0h;cc11K19tbTSza@F#K zV`krwS(Ej9qukZEsWmrEGWpXtqdkP)PBEU`#5t{XUE#?Cv`hJ=@99(DnxQ^)_b4S5 zd&2$^KcRd_UV($b4%541XP5E1PqpNJgl_b#3#5QV7P}pH;P8HDTk>`;=F>ZX#@M!? zK=Gb~O0DqSYS{u2D}`-Rv+2okvMF)4XiZ+YfF1z;;(DU)c^jh$aiJlXzvocBoI553NHKTO=;L}>zbH@2dkY24?Xbb6$ZuT-i@w7G>QIsG5#6L{e(Qifmpqj6c=e8bG zHI9f73c;O`?xh%Dj`|uY`GcIV9}>f_3^DIyeXIQlEsR(%RWGe&$@%&AnA>{?O-j-G zQbD^O`k)@WM8>>8SjMMjD&Q+Z%rlYzxEoft)l{R3CTl@JuAM6z_SKzaoJ(9_m^~ol ze$X3_>4<=926lX_70OVZfCT4JcHi-qY ziD{Xy=q}kI6BS?Y%Ldl;HWU;W561oOk_~)b>%A+KI&H{HKRT#m4Xr6{rLGoaNzjS` z$p5TC=4g4PoEwB`nS2@Yw(HdGFp`q)drflUbIwmbqE#njobjU}S~YK9 zKSOr#4B8VP3P3M?<9|`uD_bPEt9}6sl&BKLxtVh}ufxhJ_>B07DCAcMFs8;^na;}7 zyLQut&3VUqGt_3)Yfo0QeN0~NI+G-5y#oM~qjYb?Fl%uml{#-v@K{mr2CWB!{EJ{) zx5?nLc^DBA*9Ee47{OG3X=Q%@K*{(%bF|{?>yHIe?0aN^da(v>hCCV{A(x0|HWism z10MQ7bLHbH*2dR`u`K;mqmCER`UCvCRz);38w2H!G2TglcJa!>4;b7RS*gz;E1r*9 z#F+&a+Uas8K{u;2u@8H&91ZVPf8aWO2HvopoH`fIWw-xf7kYiP9kf4adl65kPkC;! z<=`_JmMwbaW#-ZRYdcKVgib&avshlV?a28>Cg8#-vt>Neakq1bMe6BWYL+^8=0aDT zXTqrbty@SeBaBwt&9g1Leh0m>>gX~!CAb>=>$*R;g}dICtARI(-D^zYYPpjm;(}@+ za!X9Qi6N=^;3N$jGX&bdhBw&HoW4m#%j{ckpvQwo&futf`cotV)LO=| zyP!|gUyf$Myk>lRC&g~6G7*xQrMk~24< zHS@nrD6bl6;K|NyHs0OCDoi&}DQyxi?Ed4~qtX+DkXvO5uOAjWwZ6tbv**ip z9jwb&&wQ1L%r)ATu6!X?cI$VVULN(eD4W+5rzm_?1=31@yUWRwWj>*j0gRUkNp{05*G# zoYxROwIDQ!vi@e31C$IMU6TV6(R&~gtGd3y-s3;C{_RI)iQKoHDWd%O)~FgssHKrP z;)P?-zX&BYO5`&L$4yH(Gu2ZoC(wcVHK7KF8)E~&h=9FdJlhmCkv6K0rD8fbqUBMN zD>-CjI08MJX6j8!bgleOVmng3^y?PYr@ZL0!;AoRaJjqg&J0-yn&j~$%(z;j+KySF zv1$ehvHD&NvJ?EsvbPfc3PbYWteZvm&i6(U+%7~H7un~3k%Jx@DMTM_{}!7hEEo}` zIOc;R(%nwHXXjY)?9?6E=7Pf{{;)$HrwE?@ASJ_{yu@vzN6vYCtfz8sUr{m7E}1Xp z5h^u@1m_RW>Sq(mA)Ad2w+4k6r9O9C7YMX9f)srezAi$K92z@}2Rg`D0jaec*JIQ3 zwUw^gz;|ZG*;g*LI9&`J>>QVkv-6iggx16Hdt|J05jn5#W(@wk0j%3QCEe}9na+I# z*+x$|dnwSJK()7@DvgK=X8LKotb3_CQ{~ahWE<=e@5HLD}>{}4@cNeb;AmP)wQx_ z#Gu~ftv6p`>m7}qEK+IR4$?ozQ$|?Qlpz2|WkddgO@({25WsiaP^_DH9*T$-WEvXJ zFo)+6hYW!xgzANRKllw>l*60%EIhsI*CPjCN0h|SWI@feQxt!sar?K0sEGXb8{+$Y zc(%9lClTMsF^&Y>u+J_J%{Sc4+$S)V=?U=)`h}stk!~v|X$Pr0y7svpT)e9+T zcS~8LV`ijVNo;oq;hO^93i~>Ak7KfSy4OX|BKwVCy{4QqX3jgm)+e&H zw1l2~TuWhmq22NA=0{(Lfh_gkEi$*IWCA8%Wex9yr|-g@2{oWMUvNrUJ`2BQ!sGBs ztVpkMaPDFew0Ri!F3dR2H;(PL#zr1BmPbG!;W$j*gs}}r1|+}@yy8c}b{kSxk6%O? z>b?1zME6di&sZtrf|?s{htWRLBVFvFkjq;#%0En_RJ)f+8n zR^cJL2BUmw5x{63XM^w5zhH5F0)_Uff(6S zjlEgI?57i2+$gul&+X?zEUOd=$l(VuWv-5~BpedJpeG1a6j_5=HvVapp*2T_l!*xZiHdt{wov$dsV9>O>ZNWgTeQ+~VW)ovVJ^2lM>J+=vrBR6kXC3pOaT694 zPj`xgA!+>}QZN1Bg{|U%guecljc>*}K~*#o`kQ~en(104yTf{tU!@0wQ9QgYJ(YVH zJ0|(QlTz-x_IMm#^t`9%kUBtNhFU7X9e>f>1-j$Yj^FskAM5?qK5l5Gl5x#QAi!Gt z)+uZ$)yh)2%G2!OxVR>9;n{2;@n<{k?d%&CzO!EYv}DSGF9t*^SoVmy!I1S+tM87D zx25y-X1|q}0qbGK0jbV|>|-Tv5UlCX^gx$MY1WX-vdrJo6mqNLSYO_uzhNxsw0o}Q zd2IhSgi69lP%dU7y+9vT)xrO^^5|})!0MG=kbZo!1$SWQ*3bkeAN=+nYsv;Ux|Wn^ zT7A=!)ErJz3}7~*z&&Gw=XjXgF4Fi+cy^?SmHgYvHw->HcaF!72mN(a8O1^ZaE!CR z?7-b-rv&6~#=iBr6G_$D{FdQi`S%$+zl@8kwr<`^-PD1g8Q#4lxY}q=XomXv>qqqC z)aWiB&0>oFOd(;B2g6z8&qx3zX^bKM>LI`t)B-D)*l>;MxB_|k;GeF3nntzZ*UMQD zovRHG|4M>DdNP7i2-yQOywf=KgJB6u^=@?|f@CX&$h{-Biyl{ytx#wj-{^R{}! zE(K}%pl{`N=vX&;O76=kZ#F|6vMLP-(jES zcwX(s%;nx&Z1`R=@JK?jyZ`19)~2`K%ScHs(mmrIzVTk=)32#|N}u-y*?})zx8mpe zdab*`Eerf~3frpDgb)rNZwJ>H6fr}_ffW+2vjt~nNLW{W$xHNL31-qe0qt2>wEcu* zYv&yTEBLf)ukZU)zuMifLEBr+B^G#DUcd{2P;v0pYjk%2uZm5`O2OckST8j7gfLL; zDU2rv?!2=ttA7RGdpmO2(D|s^Bykj=ef$HZ5X{Z)#lzqv#k`v8S3exDC(Brv z-*0BFt!DIT0ED?=i-2$YeS6_cFPTL7-*>@;2MpEu)hA9l0joa5K;vgQh>s4_@Zdn* zD}4Vi)CY7bfShJIa6I%H(Q2MfwY!;;naeX|;^n}HZgL3qN8Cn0VV!;8XDl{YwjK6O z5*Sm|iW>51g?-SJdj)^=Dl#2Na92lv&?OA-PrWrjg+rYR8v8h;|D5oyZ_1|FFK2(& zh`rU-&s&k0)k}qnMzB;^p$F5x_rCd_kP>j;#4{66GhW6mjFH{O3<{y>_i+0z5Zn7r z>V3v2Zqt(H4F6fTG~kPCuH`E3RNaB4!X7PX+BF?QwjAzIPlnvVs}_@j;%d9_bFZgjkGmyF+Lg^F@Q7Fc!L zEWBl?RB8pL>!nw?JK$?S*{{HIkL8*r6p{DzG}rcy-1{AuKTA9V?#lLn0~P|~y^>SS z2OaWm=08#TZ|?&Mq<|N9B$)R76o!>=hIa2y6gL#j8K2c8E$glxSRJ9a`YIHfL?DVl z&+v=Scj}W)D&9DhV85%K)b1_(0{oB#8!Hs{8AVjn4iP_AEl$&)5lv|@RC&)>sSWh- z|1{Qmh`#%guH5%`wi*Id9g}NPxE5+!l?>Dl6Y9BquTBv8i|yVdYAGfMXUDd4u^7K- z3sfR%4Nvv^H`d$1-Wu=h(6|TWXGD@emz=79m7?gl)qxbw)j&})RO{G z32qh{$IfmYHX&2&%b_1_9{#3^-Sc*ut;uK+Gep5IB_F!Em)n7Gg6UlQf zwdf?+kvMLEsTNQxy@-O4VRu%hLtsxns(>r1?&H9Nl3>1D1dMB=!<#jNm{3ImIpUD@Phg(H z1F6oSCe>7yhqnE8b0w-U@YsNs92>q@WJ8c8hU9y$MUbI7Ndd}$A*R2U_r&4r*fzl7k4 zNB;-sBv)|X3U6R8J#;8KX`gX)!M`>ri7mCdyMZ?yO~B?J$YmT{&1{?%{CBFgdtC4< zmz)H32HUFcq?lGuRwmj+QWGFHvQKz&j{Rdfw5Ll7AW<=v$?Zx`RAH1rT!BdLw8%I9gUf&je z6Z8{kDBojNsys2yYu|Hs-Ey2To@#Q&^Q-ik&iYvM&vY7KN|r9HtTGDKT5rr{L!Wi) z(v{cr(<>Jjby5|A+z&@a=3jjg^}6Y70h~Ye(bMKc9xfsV9+h}9qc?_+#3nX2>?C#k zoo&BQOwO5xSWFl_wM3%a-=ewaW@;XzFa41BPXmkfU*aM6kgvtN_;llp%8<2&7lPj! z&qwEj{#15Vsw-{OgjksMoTEzQk|j0PR?h3<;4Q7eaiij}&PDI@V2|RPe>@?WJ54%gD%-K=O2KH_T{KH#_wN z9}RZll!jnypyJZbglm*0`o+4vuKJ?1P5+}CJo6R?aw{lDNzJYLhl=EYL7iT)Yp1$% z%UgEzvt;YU19#(rw9(LKUrVoLxk>0f?;|+E^8@s{TaFW!_@1r#(NBHx0|xopFh3b89Ow!ARW9$O$?) zZinEC2W`sA6D>7=Wh|BJ%c?=qgT;1TcZx-Bg!}!Xd)&>8SQb=vS0w8HVhz{0l4F-d z!QQMhdKoosRgQ(;`}W%SZnML7)lysj4-Jv}!wN3?dlB~{Z*5T=Z=g zntY5S4Hl!=J%=_X-us>Dmg;iE#wVrx+TUO0-gPd~Urpd+50_~2;5873qqENn z#rDDNmNLXNNpRkMo(>%8?fLc)j}u6Eg9KqezoZ54)y-0Oe#rz&7`m_Z9ISzdqniKG zuhaw6mE{7Q6RxBxH@*i)L^ry>FML>eZvCEyO}?8{dkPWlKaxd;7Qbo`v%g?SPcBTYy?UED!yYTwz|tKNqS?(RKvbhl3>vLLzs z8AP!Fk@@m{?31yES;ayK6f{HHxx#RkiuL1o*Ae(o^UNTbt#~Pna&t?hGwO!wbIS-6 zcH9n6wdP|G^!7!%7`IEyDP09iqNa9PKZ7Cc9_rnP%U)5so@U78`{AZ4imkRlIkb2_ zH}I@58@Aij3A25oF-fZ0l4Vj-DsN=S=EU%WR&>ZaV0iYtxFR6QMJ6@a3L$|$&xcpP zW0$`E?wKvTdff1C7wqq{xiu9D6 zk<5xRb_sL}oxLTp=N`I%5PGU!Tm7P!Nju{gWn#nzP(+derO7e_V)&O<7xv zXQdg;tlX=R>8CAHv)A-*@~^o%}+ zoS?Z2cXxss`f?&=M)K8OBza}^doj-D%rN}c#O227_lil&z6o2dk4Eb8XOUqg!b02~ zPV>c=dOtYT*9ePTqdVD32L(K#DprDk4U4-O`gzMXd@S~+cq4X+4PX#|T{?te z?9U_lyfArfZkem=jLX?uCZ~NKOZgN6w>f=I&nsl~;eTMQ%T4rqN!X!kMB=!4@bmZY zy^F1|b`bMU+|T<$+>V1vU6mzXbU^6+NA@IMzw0fT0)9RGF;F{pU~*T*Ml_1w}4Yqq=c}$CjIsz9u6k2cI&cIoS&?Q$pV(RFvj>$#xj;*WUM9tEZgb#&XoYNALQ2qLP9&JUzIEf4_L75s9FJ6^B=J~NJfHD0SIi?P zCK~hz695rrS}v!~wvf+Uc<3JodO6+QsgLuq)nD4{y$9REO4lDGay@OS z!;QAXa=vWz>686d|=X7THcZ&zD6Lkka(#Q7pasI+=@5-jg zlt&d)11RNa?xOvU&iOPIr7wsOck5{@{T3^G#3It@w+=rBgI>4id9*6TB|_UYn`D1P z>2fg^xelgTGgYz_u4V-I1{u- z#eX@7*Bfni#jR%g1co-uyn;;Hcq7-qo!b$%#}K1?+EV4v56cEH95YkM4lL731&bM9 zeR*6l)=6Q8kCmC>@*Jn$q|Ovu^X-Kx=rBI0wo1v0x-P-I(~XN@iqaC;)pZH6?*=%gf-U^CkRH>m@FUX_>{UO{N5s zqboYIpTq^kQQRTANj%NoMU%XJV@?A-Qt|ZT z7lP$q+<<9mbUOGQSa$ZyTjy?;8y*2tHRh#Ps2+2)FElpEU7ud^q$vGmFm9WmlMZiN zouaq7+Te-KU`Sse#J1vwo@Y@i<%u-p!$2$ThB;(u+uT^gk;zHI+yyee8oHhKbhLM( z8gupe*#p)t*cHxO-FL>##hw%GNf%|b87$LT*S~hmpXBTN-jv$7mwxPa^o0vMQTlYA zQoM6RLgKrIs(zQh%d>OEmQ!2>m6FdY)%+qK#}RJ;$hmHbbete_D(=j+orw7S{yMkC z#-B-B&9sjWxvD9f(TLEHWCY)xu#{Rmb2w_LV|!dsr*`(f*C$xgEv@4io_Z@{FS#Dr zpRw^tn$9NmJ`qJmZUiMFqj3nc3)GS5L6XAl*j9|e+aH6-9Quh74K__pF_hge}t0J z58+zHz0esgw>OYSZbwt&bv?(*SOQn=M1iS6M}6Yx$zzaz=pXK42cnJthouRu0<*+J z_=eC_&G5@th5m&8-`wj@3Zy!?IM$AhTokEJ{DJ*TxCNLLjh1mcq5A|v{Y#mIaNr;E z`^&Ex|M{BoH@5mm>hTY+;$quzt>(UI_d?7a%|6zQzNZDl@iIw>kn^@auV`ArgYV+apBl? zqk1m=koe9G1L*+mA=-_!K%I#=3R|)yEzSoSS|7gnCfqn^2ybv6V^!x;GE%Y6B=~hK z3oI-qN;#y{*>6deaZIm%Ded(P0=bu5IG497^{7WGp%t9YHt%~L=#(UewzE(9dE`x=yz1(|9L*GKvz29ExL0lg@?TO{WWoUj}Wm?LvWaUs?OHTG%{Me6+ zL&^gjQ{%Ex;DA|~C1kB!0@$7RZ08T)C-PyYw#_h2V#%iX9sN~dqW51T{^X)y}e7l7NoRl6m1gC*zJs0ywF-yKaHt`YnX7aeFLajD9%B z>+;qz598uTo;E4sp6=UNJ3yNDNf$CO)T!UX`Gl6-t}Pvy2% z7%i03&IuHw+!q+cm)f0C8ug# z6J@4Q0QTq642KwV68YQgy5O`BNX8H{`U6wQFtgN;F~#$N+nFgKb5J?wT%0gKC2Ur- z_z3unxeH+LkL|DLY!U$vbh$a_=Q?i|??jYq*+e5}-Y8b(bKKbp+20A4YofE)6$^@G zHBzbidt$jnDe$WrP>%`0szU1;9>$FhFp{1a;8PaZblqjA_A)CANlgK(nW6&o?xHuS zUX;dy4h8|>)Z1&mk#->-YqcycENg}@0y}f>Hd_i~O|K&6dk~@J-5sycu*&YWqVeMP zRO{wW=-#OZ8eHg+!S+>)jaq4IV z74FiUzlSf(izH@%gs^LwKG9%<4H+rdXdjG-<$gv6IDm64Nd_Ok(5QMk{ZL@cluTFV zXW-SzZ)p7;87_v=#m6L}mAwKdUZKadJ_}Dv0vpKCI0r!=$cEa7aOCTK!Vl{O`dr#T zu9?McZIa9o5lTWCv^POESwJc!0W_|`M?!>wZ`8919?f)E|yC?$kP)&6J#(1X2rPQG|>#hZtmJxJqjcITpSY z#=Ar!S@o#EEB};~ugkCf|z%<5m_^ln*5c~+5W|jY?16J^z_|VTbF#;3Q0+Z<+Z^dir zYAI4&c08V!OgGzFE*GlteOjmxA#cUjf-~S7+4Ct}h88NC`Lo}!k72)LH8ha;R2Ha} z+zjW~tMw|D*AW|qh$u+gzD|)R9L6on%KuGUnjQ~DgG{AZ66wbFYQwCO{nSMSmr#NY zo~r60F2edVVVCO`)H=N7Qc(W{*!#kHR|hOmOZmHZLmm{iyK2|F+40 zoWNfHKq+3e@^5|u^TvDeoV5kD@1@ee8~GPvm(C;*XDQ&m%jxoS5iXwIia(K(q>eln z7#3FT<3-dSBK3DY+N|}V>EYRKdgvmnW{MLo}T4Q3GZ`Bw^uMz;lc3oYQXy$ z+FC=Z7BdZBzZlI$cq7*d?C=LyeFGAs8GD}Yf9z5bk#PXeXsFjWk{}mu4}uQ&sW5Rn zq|#(6G&<4_S`PA`ZEv_H{C+cgx6yOzW7F)(D6_sIE&6Ucj&PQHs-22Ub&A#%-`O0|&yk%7Jso?5A#A1c;4M%iV;o80UzwKT94#4F7 zL-C2U)Tzpq3v1?kQ{1=jE+m9yfn8Po~I6GWgG8C!_Wn zn|A9a`%1Uc$J8_a>}vRV^ju-y4+NV@ZYJC<)>chijKXY=px*KRF}iQaaO3oDDyx8~ zTj~-&>)-7Xw#3(G26txr(WH1WluBfY>Vti}D*jxZo|@2*yQJ3LeKJRSAd>GCac0x<8R~w;jc81$!h{ods27?P7h7p|S8p?BD(6`| z{#FbN`wgx;Z%xwW(MI_#0>OU*7{>!((j{)6_~{mT(|uh}M0HK_Z(+(VHe&Dj#T_i{ z;Zi-MP35%aKL|jrFtTzHnQO@>1KZfs?<)EOSsUfmP{S27<1QI}3m8^LpL21-K<~r# zYF&-@2VF2d&=Sd0jA?rwe^8%=5tpsDy(gGauf2U^Ed8d#edk!Uu`d4KaczW4`8x1c zxJyN`cpm(>`Fg(d4YQCPICsAq$}HO*|V2Wa9_VDZPnEx)XnnH zi{)Tuv4Vxm@4JFjn4KW{hefP}pWxphV}?-6b$=ZmW3TEtaD{%pV_m|n2)!v#8ztWbdM9pArz))eLUw`{uXk45zD#4fK2`vKhYnjY(jp;;s5%&S;oH5FEx%Cv0K-t zrpAj$7>2K3p%@c_?#c*P2t6@JmT}n$Ciy)^_f~6Iz`5o9!e35}`R{%IN=KloE*!%| zMEEoo(Kx$-<)=?b|4l|Pao8EJ!5y)p)R!3p&T#l=B?81b#D0w1AM8be%c$7H*Cg|b zE+LO^ccEgz;rCDd{Fa<=jHg6hvSo_o2?uMs9Y2I;^M0O78EqQSQ}X@ipdq*#GFs>! z%ON^bRn8F0Q%1a2klCjsfN2wVRn++Bx3o#Yz35_ttzYk@S_IZ-WL8@n#2wa>5TUGJ zICps&N5;xoG!hju6P~gI&UZxTu|nG1U7fZEm-^aYsHu1S3q%rrynlDSy4sNb7;9-& z00vv_AQXrR#IkqSlvUk9B>?yO-!z2)*SNnJ`kx%<=ifgk{!MxQ$yAuez0n$n#z47Q zw#e!E(O{eN6#)%tc-vdW3y$&0|E*UNGNxI(9ReCRVi6<+W!VH4_*+Q)ud=_*zl;2j z8A3tsUlXXle>(ZSL0^52nGGg{j{iJjI_&!~A6Cf{ndNrPGL*EPEGhaZbbIoH=JkK8 zdC}lvWp&9f2M32(rpoe-m|{v&ORCPEs;f$U(F z?`f@w;H^wqxKI23ChK+khuu)l{K{4Dn|{%)Bq2pnDmI%);r8yc=11))9Qmz@KfJ;i1BJCdT(KZ@B0A=@rTd zCN-spwxOFS*NFnt4oTmS5O1so!$MvRyhwp0Z;U2u5?y8*j{CV=Hw8&bE>Ds$r8X#@ z?h|p!X&BIJCZG?;w8y_@8w)BG(IlS16V%}bK}AY^ux24_U!`8QzQ!J9!196inJ!#5un z?L59@^ye?X1C@IPImIqYvIrL0A0}hlvnPc#-CSvO=U(hR1{4bFTP|{lL>=yfkhh$X z$5=1kIo(@3VJMb{$LU@H-*3+K>V%LW649;oK}mNBuvz&2*~f=3{PU;>$^XUMQu=>t zYxmK1Sf+A`0n80fQuX=Ba-TiCuK8Mx6d_b_Cj!>Hw3oeo>nJ&F5?@}NN!)p?AaJs3 z%Umm#Yt$@fH~q6bu@*U4^!O8hLe0pv=eL&fQ7k8=_k@BJ)jnv6h6p{LI_@*nabqJz zi!081s7(ldCd2DA{xHqbgqkqy=b|KLY^bxOgS39h>sCJInfy-R{##GHDNpASXU8B{ z6DyFgV&*HCTc7E>OZK!mh9u2E#c8ZKf_=p4VQ*OBI~Ps)J{SAuvO~$=4?3cmv*U7u zZV{3&dS;uvOUjr&n8Pm|0yZibKY-N3F$30!%b1%tF5pY%1@KF+{JPtR*0vmD<1b=U_N_o9o zUqrE7<5T1ImLR!Yw7(Sqnv@A4Uh#Yeeg69w!j~=_rgAR?ic@T4IiB92ZAu2g`|8(q z)JHv^H^+m_E^8oB!cqVs?~35P;)_ZQeVW}K&+P+8=}tTL;U**k6DTB(t#7UXgZ z7=Lks9R+WXNAMSPKPnsf2@d;vPR&xIy$eAeV@LbSy|(d`KSKD@vDpZ^*C;o*J&DN3 ztr*o}gyd#L;$p!4alz15Sod=?WEB&;-T^V)*0(pd-jQlkihaCL2Q$mf3Ko)Y8dV>c zj8IGHm>w9{iLMuSOb@xN8e$+gSuD7L%O@$HcEAemjqh_hIc(Ot7P(0o73EI__{$a- zI%c$#xI9dk@1Qsun%J=OO2TTo?zoYpT!&kZTERa?uthf&yfH+r=mi8eFry=0t3WEQ zH!92+O-g(OKe<1#Fe5VTiJZ~Q>(iDX1zMNK{S^hYXueuPgspSr|MX(1cC{}HujZ0@ zRZw}!b;5`RO@&)a)j9+k7$fj`xt`3&O`e$wma1dlda^84kkqx{YK8JFyvj(J5iuCM2d zH9{FqkNmdd+$WCpla{UY(>Q?Ui_FH|O%0AqZ8dA;R?s@z{1WOHGXBp}WKmit=a~*R z!rC26+0c*IG%_d{rldK4kSi(33MZ5Qv8&a!zuy0tN2ueGQef-}?wZ34e;bZM#=)0@ za0v)ZE<4m2qeSy^kIUK`Uk!~{b>{4nzEb3@)f7>g_<;#MG!Ub^XA<0W}XS01R|Zd(Y+!UBKCUDUN)2?yzJF#O9?qT7>b;wYxV76AuF4 zVGfURP-_FMb`)rS2oX@upSlfTH~&vvUjh%+_xE3j5ZX|7N|Y`8zLZK?%QE5Gg))OI zL-w5_Sqj-@&2kyr$i8Ra8G{f)jGZC-|Bk-j=l4AS=k@S^A*b;A#37cb;|)JG4E_8&4|%17k$>VD$Os&h%kJjhAA^~Y z8M^jxdeXAYNGV@0*7@S4yC?o!hYC;?DR;nV`mt=_Xpbi0>`Z>y`9^GCdh}F0P3cT`-^kfJLkn) zhj?`#wi*=qMp6y3kkV<#-?mE7)^6YDUA13NP3|`$Eu+2H->sjiuW)hXk{BuvMcqj3 z#uR&2mNfOng}Ug`=i}sBUkDzja|zP@0ny4WV1jk#p}jE~;48?kK9J@(q#FY^i{>Y6 zN0d~4z1!v(vJJkS3*+won)SXo*LMR*m>_zV)BC{rnM}@=p{k$P29nbw$Ed4*Bz8Uu zzK1T(d;dT#t=0Z|f78?HkbwNq%3B9xkwYPb)#b5HOz&gGKbwf|Uma(1{7(3~U}@Fp zC`q!>igq3?>iV>0Bi2q9^808p_rO{$d3v4g2+~wTBfT@&fiCv*)ZJux`w)XCmebe! zXTM!o+&ENV`!Kb%oY#97PjGY9(YAK@>4t-Y6+JXZx$^#>Ccc*?(N}VFHDfF%X{tVw zn7s9}08;Q=;fyQo(qYPeWgloRD761N5k2@B%m#;E5A^(ueubXXa3!-w$2_{ZTug4l z9nS`6aWdrW4;@~*zTas730z)ktT_I@{l?yuzp-re`P9i%fIPk7|d_uqF(xRd0HJqI&7P$TU3bR^?MdU4$QfPN{jyZyVS>HXZN! z(%s7c!uXI!A~)H>lyyRG@*b!2-6tpQ8crOcTH}3Io;Twi)(_OVhbjZA{%esTrG zb}#*&B2c2ELoKkStu$gzGJ0s4`m@E&nf{lhq_p-rk*^{kEyu8xloDHozMxPj)O7n7 z>X3!IBO~I8PO`J*1H)0v?!#U@{Q;nT&7Z6;r8TY}K?^fp7A}T$8RSELQc3O~T{Qh4 zkajpUDc^}|c)=r|?up2hE5An`OUoNQyjgax#krL9U9jcOOLqql|Cuf``&xsA> zK4Yv<_(%8{FE|%aR1pl4vw!G~;V_`ZFA5}E@cb(B+kHH%f@Lsfez27Nr~SgPAFNxa zg9p^$T$aL891)3J&DmFKA zAI&?stXYa&P{RiDWl~Vz)3O?+AU1!tG=gYxmNylngLh00g57KF28e4`@YOpRrY&z- zS}jy*Zt&~sM|;|oNAHZT6+`QxMf&^Zr0=bcv%Or7_K2pskLYU6>`|({GtioI7#Qnq zBC$A%9>7|={f(4n%HvPpH*ElXV(5ROB|=D*bs7t!kW*S-U9f!JSJA8~#(EV`=EPz= zd0kvw?0mtZgach$^Lr=8ZlAjCMC*pPy9j^hNgxEc|L=>d{}!EX{~MeA*MFczJVN+( zB8A=wrj8hF_$w1`070A5(bOG?;4FbrGks6BrPtX4)OxY;ovqymd3n2QVyvBMMfkmn z^WjBr>+Jr37cTx`7?s+){3j(xZ|Pg$vd^XjQ)6nuHB!m(j5LbbIl-}{jHNF5`kODX z{KzHREbtzU(^)Zz-|QYU5iG&Bx*CG#uiauEFrRicr%ZPnx_MTq{oN{UsU@Zm0|Yz~?43;WG}OM*i6^cG49G4ul=&cI6)DZ#@OmD^ zh?@O16}OY^lVFmO!l`aMW;0xWxkKf;GN@mCMm4#7ShCRP?wS|Y_d&_0W$ek}i!}qM zDgjMls6_BV(N9?an@e<~4y z;sMXO9n_zvBo1S8Pg4kF`8HBrkt-uE%sWYhM{vDP%;u zjrxnX#R-(qe@XNMC%>N=t#jlJ-Av}(v-J4j=52UE_NpC(==a7OV52Ac;*5sG7p}X^ zUfv8)FTK+;cpVSO{VQz?`t;#9gb$S=JEYHtq zb@l|6-uZ3FVLL3`(x9kk=hLIXy)hN^`1{F&z@5IB$By$gQ=e`9w#Q6pk`Kbm8|}Io z>X7q|iMOd|R#S%QNB6DoM0Gp7evU|rWnGojU6$1}jUCDbL}L8<)n0=Z(dIP!Tnx&I6Zb%z}n2 zL_96OGbHshvs>^%3wD(K(L3po;h&pEN#GgFs^|QQ2dQbz6ikS7inSfEZ#zA*rP0i; z&+e0?wgj=aCkg=1N^D0%vbIWFGc=_=@1fJ;)RsG8fxTBnZ;YFI!37*jbbf^*JPU1_ zR%+iC5cf6$Ms6P9?M>F2<0f9xoW)i*AWiO)W7a$c8%buYcgC6;8NeOh)c<0gU| z*Ee8o{b%{?Q!*1Tw7`WkCw=9CVd}K1P^+}X>gCa%Zn26N)wFX?O)!g5<-*;S@>_b9 zyDl=f?hfdb#o6BxZ;9v|HGa-Z(n+2~C)`tfcX+-g_W8|obNV{S;%-=_#+ZL}PVQW) zdM2mg=TDzrw8V~0Vq<9eE^ygJgYt4OZg#f7u22HE*+q&bEUt?=FS{bu&@~g4~FQ?FJ&7PXoFA<$)G4y>mBZR=zAAF1Ocx!E!6W zmM1O(8+-Nd{mQ-8yx{WfJJb8lU3Q+L2_lA9l;CMz{BZQ6C(6aQxcPI{;)k7<6XusU z-pLHI);xP>pk5cv%crH&AC?H^{w81R=?tWGLSGlRn4{%llD@24ABn!PF0_v|JR{R>ibu$!y6)-oC3~d-aI> zWgt6mUh0kvBJAXau2|n~pd_h_6|a;RD=R`K#}WqRdE!FAmsZ#qTdXASe z&ReA2?YQr7FMDd$l}PZ>qd>4b^FmTLDAWZz{E7Pg#N!)JZ^PxnbHlN=*I8P?q8?4pWDUq%us4E3j7*$B9$qxwqUL?uimDQ zwq4>%VN_l(ThJAEUPIV~Sx~VgdclVu3kJ|IUZRe3Qs87DnWoX~j3xFcf_<*X!5Ru(jVzyp5b~ z-+D1}2l3FH@ueFx8A_S}2>M={n^i%nBU+em($g)5b-m_NPXpqLm8siHyb(a|SmC&3GQ)Hit6pL(aU7t0Z@Lc%vj^sF?&!iY9eF zhn{Q_CY^9Z1%Umz`dK$iCW*wY+K9a7og8&FdOC2c9`IzJG?mZ((Sz5q9S=>YVM%<3 zdaQ9B4WIH8OmW*+_sS?Q-+Zg$b#&7Gi>s5d{nHD%l$2w{a&T}uuJ{o=pBaUSE+c*@ zJi=;zWWs~{$WeHcEx1%x!^ixRKNFmc0d2NYpL@-W@4jS-#lyXZGUEP2ad)fwac=4d zrV~43z$=YQdWKCFCCwvJE6W(4ABWh9Wqt+F<(@ z{h<*EP9R4K9R;0ZH>xaK91UHz!-}E%gnyzDnJlBq(9O5(@=l`2hiJ`k=mwV+ZvSWE zvM|=#*!RkxvhzRdV=l5cR!6%*B%~yP=VUH-XPjfLFNlc+gO^FV5=w@XJGvW^P#c`q zrcZcpk{#$@MGj})OLo@BQ2)ZHr}{MfUV5?lmgd3ptZ>Q^)t?VPe-B`ARYP~e(aErk z<(z48W=hVw?+ot$QK=` zto(GW%?QM!?kjr827rOuU+X-VNGPtU7Q28Rx(e_Oi*YP^w6@nW?=vPaGnebDY}jm6 zdUmifmGcntSr2}*=|T68Sr;#s2=E0?8_|ujeCFHIMgF)o=4tc3P!XM2puL5G1VO+s<|r}N8mWFvn%a9D#X*o*iv?D_}pn(o0S`}PsxFrBlyMfdEYp7!(B zte)y&4!MBR*CJQoh_L3T^KY-!#PcMUZE&dDlpIcqhNW&+ElR)=#{Q7b%?(;q6j+~I zu;M|GhY5U43N5V1I0`h1+ykhr@_dJjorwam=a!9Ubx9DklE}K}!E$xbJCZBzN7JI= zAaV8ilA!o*%wL}Ahs7*Oj+W3GWd}J*hv9jB|Lp>yrBu_>XgueIbQ={l$3wdT(NqWZ zp*cBQ9c95Az=mij^U@J-3rq3lfJ%5UTF6cUP$>-JrAzusgw54{mY;rrH5hca&%AQj zYfAh^zDNmKo19EREK@4nU9&kFvgHGHm{t^$uh?+H`16&gICc~*MsLHgIii@Bip243 zE7f2PuVDh#@`j$-Qc&LS>!b0nQ-13tzSrTaU6e%(^N|*pZGW=}Qcq1aHLLv4^zIdr z0rzj-3}0iI?GBn3-RNci2tDS6|CAGa%1WsSxv)B$fvXg^8-9Qw0V2zZBuEiqD`tw0 zn@6$hLR^4-34POu{St@f6I5Ae#3e_fG+|b#_1+HTu}WfdYZk}XFQX;Bk~?8tLA)Qp z_~zckav1WrdF2r_A~4So6P1c*@?{G6d&ocABLdxTZ+?_RV`zIOzjsS>MI>M5u5lZ( zZswK#BFdlGUEatfHdA+9Zr4Yhgre?4>n+F8HnVN>QuhtODtp5d-9>CxBbzK1P zzq$u-k~D3wVk8@2$2z+O9;j@Afgc4Ce2FWrx~X>RXW|kmdRk#>wULo#f>dd_=Xg{E z{-{sSpFBq2r=eg*bA&(Y#FkCUe5#BO0O=mhQzsc#%!q4k(Q{FApv=y|3!EG*4=`f|-lySC5096pzq&f1N+ zb4SeWq%a)Z{~ViHb&<2KLc- z5?CxYw<2KjV-!20EKO$hkdz$JVwb@YctgR`law-cAuXK*u&2~z)IF5=I+0aCT1+eS zWiAiFSHp4zMN1xYOoMY`PXWggR)gbyxhRW0rx9jzyY_&_BgV*^{^P0ugiE#dAf0L| z-@4L{0yAl+lR z0C*6d4Bdd*wWSCtebYIgQ_Y$yK{1-wMgehg(FeaW6P)9qOip17lL^(ZxqAb zCoRqlK*4Q*ETpJ0fti|5>;&k~saaRf_ z?Dg{Ufp=xn+THN{h6i(MnQBKIf#*}A9X-l^w)jaIDudGZ*Xyg@IKS2adw15pO zeWOd;{fwhdh6Qb{RUPpA72+Xxx2{Ef?QXn+rvyu~_ZzfwxxxCS#}sBIm`Zr;UT7#T zKOGiwv^Vo(m`0vq;d@gG!p3lsT*Z8!%nrdf%0n@75pb2Eq72F}_SpNriK#20CA+cs zV`)#)&p%PzQTS!$w#zWC1bRETn1-UDQ10KVf&>0ujlfg!_Y)b?K7V{ayLQ36^sMqQ zC0EUa)odEor5H(PwZik`*7YOI;NnQe($Y zum{~n3G`NO0#6*a+bqa72sCpjIl1 z!}(l`)y{Nf>b6snJi0?VqlE1TFZ?{6?B2ciVt4H*flKn1JZSR)2zLI^$B z+vQzNYOD8pRuf&p*g*;QA`PD$i-fE!cTHp2V)Y(Q9F@?n9E|=>$uhQp=krn(<=>uT zR9)>=S)XJC?9)++HvZrtQ3oF?I;p&fc4O9+&5f6hIU+QNXjk(h%vB0-B#v4O1hKg% z?Jy>`%QN>XUA_%7t@U_yy8Wq!Nz(Er7f_XbW@UnI*A|B=~587h5t@4OXw5Y-7&RrpN{e94_H(&3ytxOVX)X4vblo%{$> z{*3dGE^gZOrtXDDnHeL9==ZQ%0UX1YVM_hn;8qz+)aCY^>r7Y%hxkw67qyGUOtf6H zc7ewA6U$8)9}+D1Giup%=jj?Y_ak5$p!(Ae$=|3UBz+8fa5LK1W=F&!B6vHi&G0j) z&(^g}zb%){6^YZ&;7?E|Yi)B3a>?$WPVZ+(EaqC`wE4U*e6A zzNsz4_^LolDuhmzXh+lSkUFsNru%(F5`QA&3AUB%Vk$A3BJpz2&!=_R+}Zkb;DOlW zGM6K7SlW5b*MDRYflfCQmHOg$hTf$q20q1_qm>0(j(aTORn>>Lbrn;(ttm@GNaZDf zUKZzNj9%yX*}R_z+8S_SK;Ve!O78ZX4%o!wgBczVqJC)aHaQT=O7FKg`l=?jtQoG? zjSyvIWJQg?ek!p4rd_{$LU{kvS8qgEP5fgQaad}Q)$=L=#y0M$CRkf*N&d({QdqdX z56o8~BlYPc7Ml4IofNtFRZpU_zV~}ypX#8icOt94&Zs?qDO$W0w~WE;o?*$|+&c_( zjx|RiclBaqHlt<&z%jbs;?k$`c)ggX?hXaPB*SM`-xYHCJb$}R8c7A<0>L-a=iO^Q z`&)=3FQ;oez)WbRzX=LjWzKSASt9R56bk_C#*$~rBWgLz@9;VI(%27oz$$s-RMGbt z>9R}WHdE=->%yAm?&*M=LR!b}Mr=;YDbZ^o@C(-a4vTrNHB{6ifn8yjA9rZwEJA1C zHZahJ4_oi+*2HtM2^Tt1V-(w7nfglVBKb=bUfqjG(<=T3Q}H$`wo9r{?fNC9`>7RA z5)qPAR#fN76Q4WnIU*c);C(#9>bZU?SZLQSH50!o?}abQ6OHLTFb{0MdAN;azO`T{qd^Y(f)pX5aBNocA5rShEjL=U;OZ%bUG zbh_|@XXJF&|K2&Xe>(ZP{xj`=BE&qhFK`obi@ibb-sRjr+H*BqEYC=YSiR2>-kNd- ze0a@LcFb)^>ew6}=ghML>qwtau8NjBTO7@M^WS;@pXt9H)&Wi1r}2`^{|KQlG*BK4 zy&=Pw+Z2uv;}VMpn%{Z2 z&CDM%NhJ+n_oMOrGx}BjWnOPCM3}sm)vj)`#t6eXKQ7xot}0Qgr?ZE5$$4!O`Po3j zat0e(87HraHdyL&{kEyAlzt3`de;X&E=A#4?lA0E0&Y^#W*9ktFameaS>1z)K4yG0-N&VXuJs31OmT*d zFuenoH>20)BF6cb>@M2L^JlZ($iTM2ZXoSx&U@dxc!TUiFYMZ&AnzBWTlXc%Nj~5% z_BY;}_#$rC%KSF1UXwW3KhSAU0l66JPo3y4d8F;nx&Mj`A?kH)FQOa9wmDHm>@qs$ z$=i5O4A{`gn)ZeKN4%^vT%wY@^)|5KDAcI@-#bl!aO2# zYnw(xo(34U_65njl=TNWOc{IITsK5Mf-m6o&UsrV@b}p8wy#-Nt)*&wGVk8jEJ?87(H_z7PGh=eC;Arcwhr&J6=8!e6vln_yj2#x%*|4Et17o$ZWrdr-!yPyvFu2Htr+ zmnD+xX!X|uK(XR7Cc+8;JA%0`d5Xe?78}1$atr=rNDMVBvQP4pLSfvzm^Py|I_%g? zgnCX2ae*7=&IPc`=1|lA>~gS{q>Inz+Cu~`7mVJixmr^j3MvW^2Pd;bi}?3(alOT6 z3XXaFH^(3jrii1B{TkjM1Nvm>Aa8-*;$O)s1wmh06Nog8bA3U4@}cUiF!PmTdiz#O z9uuEV>fm3>trlOeSA-N}?}S`R`W)u(^h{A0&=E+DsTJ#!N1JI2Jz89CK%CQWxZj2g z0{h(PfOC0cz)?x73t1b67<1)YWyp8{_)QCm0t^!$WPU4Ryds2`lR>@tcn&e)y744C znbngTW{viXT)OFOukcN_{Eg&e+bpDsU5SoT#-_nG%XzN+kN_uBo?L%$ovah{P%B3T z{V3bNJ1Y2DAj?vDb)C#Md*vOb?F+7YNB%P9?bifql`s8XpS-p}9swHUWl{;{%=+O> zp0SKvVT1b1d&;bSMt$nGf58;Wt^T|E1mV*|bn-Popf-Dv@ib_I(0jfZzib+LQ~Cx# z(|7oPp!mvzJ1hksj}AUs!2dUxkHz;mW8GB#Li%PKMit#?Ta%b#H3ri3jtD*vqei$J zcb~?KoPd1lguX%bt8y>*b)7Od$~a?|DHEJIt>#M&s0Y5_ne!B?8m_h|_wvkzY2l)M zB)(DDoEfPLaYoB&WDoi*T>2~YZq72sP8fczB4saNv79pPpJ>g^zaFQS4sBul?Ic1KO|Y$;JK8{%2GvI$#1si zdC5xL?3-j3Z5$VqkM{(LsBYqB-HIm_oa|9~X+i@vttq)0KXYJPjzAD5?3 z-oG@5zcVQkpIo{P`U{28oEsZidA86|fTgf`(FPx~r31cXY8yG8bi_2ox%kesGoQP^CK*ZS;zXR92I)Chw{*u+~6 zg6Bum{}k$n(ReM2mX4?3B9&)=Z|0;q zm>qj5mt>x~9+o%#gx73*wRl+hEuuwAUEt4%SOHTE^*Fy7%85B$3P{!xxK&Ex>S@Na zoqddPsK=8y&zDm$g|=Z7>Rcx}c!0GHUKNMf*%LGPrLh#18?SPYF~%&A%N}UCEm}CU z(Nv`Kar~WMCW4QQ9EjX+f=RL|y&(C@5q+kG6y5Q7*NP{3O%z4Dqakr;)7LqNqjm1H z8@rm)Mse47{5!BdMwS8CP%2Hgx6*8GjK^_K!0IEbboN2;6XQXx-p?SII_x_7im~B zX?ifBYwh0j4;@AGxz=|-s_wA1o99P=%2=a*X}a;-!tBgExi;rmxKnX{qiEl7ZyyIr zXQ?9Bjk=081k4eHnAF%8%WjvOIlx6q?VD0Q-+}^1=E$4!Km0-BuFEes%X714n#HoO zKfBgr{z;%`DjJ<9QCRP!aR|PyWa*ruP@?>WoOQBLjm_HTv@MUDL4MgWCF}n~#;&HZ|WQ4qMYlM{)HMYO4 zeJAt8PvcCNR;d{WT`p52>>*DNla=kQ-eP?$1CP|vY-aCyN9X`e#+T`gXv+@aIfbhv ze4?G5DYIh`;kA^a^X-_Ukt^RC=T}^b98SjCU>ofi@i(4O6j#3cW8k)oXH(NFZSoo= z-}kmpSGD)Z&@=o~E#vzP^SRu#*Tcu@(0)Xf(dJQ$jkd_~X9|pxo2jufuKt>|=lGCA z@;CFWeye&vs#W~%$_Z4!I^_h!NGu(gc{`+UwsSr>ox*I}fWw#2Ovc=dkstqCG-8+e zU(w8eTkC}4935bC<>T>PLBSej6I}1$lRD0c04Mr^H!{a0FZmkp;`%Y^m(Jq zTMIeAJOm=}T8&hRsskE#m!SkSb&$P53nvM_kCOE5#SdyiAKyj%Iq23vIi8GV~m7g$)6J znew2i&EWRMqUFvlEW8L#8lVXI6v)2Ma{!&@BZFwc+&cg(UMbf~`~0mtX4kE%6{{)y zFJT<{FEqK12@g7Iw+}sk=VJ@z@tmC^;^@Z~$tMbd>u56`*KkCh(AJ8jVVKd<6DC_! zv=uZ7x&ERWzH$+;2uXp~s30*SclCf_+hj!a7!10^Dzmuy7XXC^-lcMNq>DBV&(fvU$+}4+*L&WB>H)2BCc!d;z4hm{_@A4$FLR*g7VfRHeV{KMS zF;$Z`t7EW`G?tv0FEGtOZM~Q}%$3K;VT^XH&5@Fq!2XWisD6wEds&oz(Egye1qRFq z+RZ22iiYaGzuXhVG&i&)*Y`xbFN{@mjqaFUJo4CBTde`DN2&@m*AP0r4H!JTGubce zwXuF|FSg=N_r;eq1)I+to@ksQ2f+HbL~jO81#%tiM2!|{h$}{l!6)p z9pz$m(#c>IYctV2_f^VCNb?3QA}ppO_?gy9wAuklVl)4~^;Nrf%zoEyMr2(t+N*S4 z(e0MfrZ#96krw9lH$ zewiY);pEErzG;e&=29+r13w2}8*8rsO+VeC$jxAV?YE@_489-a)6m-L?zd}!Avo7o zYqxSS!}#QS-teP=tz@65ellRTGdS6247t_zDlrm~)I-t|dki}OT}{ip`_V;Gt^S>+Lg=OPY8%r;gjdte+x65S4yFG=__DtMy+p!a09Q5RNcXE7|RdjgdFz-ILe z^@ZJr_qal8{Vq51{{9n^izZsqd235n*Xu>oWPYheJ(FzwxY2jAiW}J6+O-B{;WUua zd+PX+JCQKlDg7uf>4WhcJ)v{c*x-V#%&kW8UU_3j>l41~({HAN!_KblkTVevhi*@t z^_JWbb~4VqK7M{F)~*NX;QCSaEK*89$sB4EC5@lfN&bwpy^~MYj6Z*!VO|^v zAAFyE6^UD@wtT2J?)P`lCdP{XkSyG2=50DDMx74Kv%Rii6KCNP0+c{|6AZyz%*7Tx z5+hvtci2uNJj-seYVZ+cghmwc4j?@Ec|auoUkEU%Lw4-`L&+DR7Hx68_e%XKR=C0_ zA*omh9mb59@GN0`LNGz-K>sOr3rA~S#Xl~)P!@G3qodg4jJ}RuOyH2R_4Or`_^Rw#L<=bagb3pk5|q%`5Xum)8QcEH^{HBQmT)6oW+h?x^MCkyO=5D2 z)UMccJNXlU0d0n3L+ht&p!xsRt!bNNXk0I#qDb^#Ws_q$b+C;DP$Hn+va25E7lD{; zHCT9319jX=D-JVUjr9 zzNY7^GLe4pR++K^lYOjs@cd~3A*p?dFCJ9YW-`Pje8^4SGhxT>Uj;_8wG31EO(~)5 z{I5{IeHUj#0;DXKud35)oq-NF90K@(xRCVnuS=tHFWvrN7WTosSo&>}df1S^U6>gM zdc=Isab~z$?-btAst1z~yK`FU z;Q`D@I8M2k&0Qn)^9z#>KL=qdcBX>(V7sGq+T>v(blPOvXh$434tOXvQ+KbuG-dy@ zM0m1;5Yw!rE|i`h;ueY{XZn#aHKKiPUYxR|7WplF^=!w|9Ur(JVvcspDKyL zfT}lRQ^>dviTJnPH^23J`a}C$pj`%dOZPfFE4CvN47>2j1LwtX(4^bFco(5C@DTHVT2ALTf-y{3H5N26LeZuUf9VZptK? zVeCU%V{L0nenh%A)NcOn$((`?M~*5LUC}Pgtt?oSwzqc@doHV`Jves&UX`^Xv9Lys zT`eoBsN`J#-bMW7m6EAavq)9|-c&$zus62=_k38rO!R2Y?s_e4EiL{huw}MCK=SzP zf+x?0+94TmTMbc?8@Vd(?(!``f;!MtS0!Eq7944k@X~Mmvk+PM*!|U$O^oENQawT7 z=>#qDTKRw&-};fqFG-1w9!ymcNZiWcdC%gwLhZ;R#`KmCh*g*x?E;i`tM5eRHQ``} zX|_heaSD=MB$Lk=t%&UNE8o&b>emeXrp$^b{S;RYjmiNR+5@0_J(y4%>C9;U>FJT& zl1++&K&C_9bLHRT;<}dNCZ35(K$DWwSBOCfxNW#B=WCuU_!YgxQ0iVs)_LK8#Gq=` z=({`0O=Z^|wSA|$I7Hy{`YNWz7V8hq(8^PDJpg_bd#k!o#7**OqH>r!BkN?w8v1(4 zh*H+v@uaV5zV-H`FTQG=O0{&Dx9Px$F0+9!*7y1QFh#{m^0PWx@8!+6<-_`?x}I9! z-yXSG!*JXqTX-r>7HEEDRv?|}Pl=>Sk%Lqv(=aPRan-4)Cbl`~$!sO0OB3y;Q2Zhf_yotk(*h71+ax*GnHeg0~s9)R}^guB9 z#H`>*H8%g{5JsPO3x>#~0S2328)05&sm!*xi$j0}l_*W~Hfkho#f#76Z+&outO`L# z{A%KJS-w0cO$ew@uMxLWZ|hG%z;b%k1LM*$LfI0S(*lFt0RE)0nig1uFilOyj*nqu z^7;tay5RsI2#;2ap73`Oniz67ONGz243p`Pa`~JRx>baH98*;H*C=y(d{|{xg1Fca zs(&?vnu*|S{HGXqZcO=nMV5BFR0eqwM!kRyGj=P3I!B~LfEowGfZIj3784z+kaHFU z@jLCJ|I_T@e~bUq8kh%q&Y|u7dUmyHa&fJD*T?k52IgJ)YH6%03GKOWYKt~Z8D42e zThbI7mg~*EvhiFOk{5xnpK7;73)qYwFB{ovl!^i_(;w@${mE^P z4zg$5U^q<9H%z%(++1{N7YPb7#SwP{ruOMM*>+5@ZS-QN#uJ;cZ^@&oY=c|HA`f|J zPf5BpSBfg{4N+FDG)ifEyHk6A1A>i58Zd9leskIwrZx=_pg`0Y=V#U-qgR15H@{-tYGw zeYHhTcFj^CN5NZhUh76S!@oOyhkjb4bSRxZp}cpwUk40iaxUsAUR{E>NvZ!5r@*^RNB&Ya-4#CV(G4LM zp;n~q`@AQI{5T~xp|O3`2|rG6_(+holu7PVS=f|?MR0AWzCm*hv0_NtPgf$s6UitI zlZuJ1Sr*=GchslWBbNNs)vPHPUgV`D^!B=sCEw!DK|7jyw|X<5jsOMxFH-6|J%nmq zOfILnT;PsybF3e%vz;1PAeWigvGZVoj&uGoCH=Y*9Gy*EFfrv3>vOr?+du)<=(%Oa z&OR@GgXEsw{r&K}FzH`JNj`PS{{acHzF^Qh9}I|qD`(~?#$SZ5{M!7e2TzEQ${6UX zmB1H&f%* zHP~pof1pjxB<~xVzU;N;g4QL1M+eD-Td*P;U9HYf0y+PIh{c}H+=uyFF@NzJ8^2zi zUyPrW{--{?Qn)k}GoE&-6&lB|`Wut>#&o9u)v-kwa{pVQ|3goFde?dOkx$B6!6NLKG3eWP`r`pZ?9rAxEv6G4 zm4ulpABcmHAJYdNlUun=_fe~O(j&oxV|11YI5AyYg|P(s-aS*Ib`mqwP|2dpBbe3S zGSqcsJo(|H!XBOTNC+8)T|I-hB{gf7IrPm3F}A5y8(Gr$pc)SZd{1QthAvw*qy|iR z5DK+N<4a{2jm=mZ8}L=>{&k6h^DA!XV-KMM6fL@u^w)Sf7-EyOS(KVG>c-UE7e9uy z(edL!1cIoud(Ot?EK!kU7DSPCZNv5Aw#>%P2zcVgXoT0Z=oyY8xr^b-Uv&;U(ce|g z^J1R=OVD$oLto7=_d~UquRZwA$P>xbw)Ejo`--Tw?0WM>*I4M2YCXyp7N|I(`>)qE z%X8H^#%b@2*kIjiq`R}Xn((V$K_H5D&jeTPl_#M~l5hvBpZolVL~&&<#F^@B!zHkTqr;*^RdfpDZqb4ygnpY0$@YwwbTq58sOu3_sZv zFiYpYeT4a4I8U}V4`055YA}N%$R0nCDfKaArV9%jb?Y!lAN0~2T?}rjB|hcf<%KI! zp|!dhZ4=h^2nbaWYQ_khvux!K1vN_?0s>gcqKf)3D|iy^9|Am%t5s(xA%kx=VDye) zNJ{9tqUepe#Tk{-JAN8yx`vo9QLo<_n9^cMcU`+pppQYwVWsM9qX&)Mi7u?AP!?xg zPncBScD_OO_|uH}Ieqc+Ufh%2o&Ig8kvLcpNmc5pw-RbCqKC5Vo;}gc9b#LG*&D~$ zJ&YLpG^*1N^Gfo#Ecs}XMdj7Rl3d|P)*9mip*09kmZ{eV2!_K^3}V8ge~kQf0{WM@ z%FN&lL4T6>x+j^-&{T@1*OJYDiM~HqtwXeOckj`+h{&Up6!C}ImxM)3lo4cmM}CG= zf2uqr+KSyPR{NA`U0Lr{!hpe~X9?D>3pxw1L58g)D?P$6?V03yUF(NA++D4=;i}*3 zcy+L{V&_J0vLA)P0kr~CupNUOaB)AXPIUdKG*!o`uzkVL7+IbG(VdjcV#A~PCQKgxYK;6=jSKe39^!>m_ }GH@C39 za9CypsOZ-c90MIY+=d=vSP77)RvB~q1@IC40cgqXiH&Crh(>{{b=PTjmzyLT03aoD9q`pDOvPg|aGa7 zh4U5oox7d43ohS;Yt!b(!Cc%wl@0%3c$A_saS@dK{-&8wX|e+E`AmWAxj^)H9Cp9< zCTh+t@4Z~f7}X(-4RpJ*Ru#U#_{dl2o0NChoBlrs*-!ad9e9Tq@Ub%;SU0PLdMKH- z89RkoA>eslA4b5{mM@ejyVk?dlXa(|sdsg6^o0NXJ_=mJ|f*X+94XK3=M?bu&kyZUX~Itl5> zVe5=uE4i(VOEM(N8;yS@nh&+9=kSi23k7$Sn>w8srh0cYkJImc5QOcgTY!qW%V+) z3Y? z!!Vm+QX}`Z*~Maoj*1;o7kqDMn4$m5!d&GiYdzL~?mMnY7L*m-o*J2>$9?}{QswrF z2X_M;%LT{k;XiBM!a=ytla2H@&0>ZY16Huw=@MA zLx!bL2iP*e@Jp7Tk{HFr!xm1d^NmYA+P?iyF&3lJEY!R8>Ei)OX>{vsnKe#(Db2-p z7{(Glk`L}3zmMCW|9fk%fQ}#=L|QIXCK-|)VlD$2f+ai~99t@Bo2@Ygy1VjM5`iQr zjW!uh1QmAALSjMep&A5@s2kc{}z`3*upi6+$e$ApkApdwE?SAtOqT69B_Xqu_! z0BOwwe_OY(9Qj^1=B=Yqhm^7G0)dTDD4O3Q*G}<4iu!*yjFuE8_@%M*Dd~|6NLk5D zneLI#23PtB?V16)=EUk%aa-W+^iG?gRJ3mF-W7%8EAMwl_1gXAo~w$c>hWsk2~1-?9fxIp+K<3 vnsxtwy2;-jK~Nmh@#M!Ao4s(!_X8UJ1?C503gbg(pr0oX)gKhxH}U&_lb;Xr literal 0 HcmV?d00001 diff --git a/Document-Processing/Excel/Spreadsheet/React/number-formatting.md b/Document-Processing/Excel/Spreadsheet/React/number-formatting.md new file mode 100644 index 0000000000..e99d7cd316 --- /dev/null +++ b/Document-Processing/Excel/Spreadsheet/React/number-formatting.md @@ -0,0 +1,53 @@ +--- +layout: post +title: Number Formatting in React Spreadsheet component | Syncfusion +description: Number formatting options in the Syncfusion React Spreadsheet component. +control: Formatting +platform: document-processing +documentation: ug +--- + +## Number Formatting + +Number formatting provides a type for your data in the Spreadsheet. Use the [`allowNumberFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#allownumberformatting) property to enable or disable the number formatting option in the Spreadsheet. + +The different types of number formatting supported in Spreadsheet are: + +| Types | Format Code | Format ID | +|---------|---------|---------| +| General(default) | NA | 0 | +| Number | `0.00` | 2 | +| Currency | `$#,##0.00` | NA | +| Accounting | `_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)` | 44 | +| ShortDate | `m/d/yyyy` | 14 | +| LongDate | `dddd, mmmm dd, yyyy` | NA | +| Time | `h:mm:ss AM/PM` | NA | +| Percentage | `0.00%` | 10 | +| Fraction | `# ?/?` | 12 | +| Scientific |`0.00E+00` | 11 | +| Text | `@` | 49 | + +Number formatting can be applied in the following ways: + +- Using the `format` property in `cell`, you can set the desired format to each cell at initial load. +- Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#numberformat) method, you can set the number format to a cell or range of cells. +- Selecting the number format option from the ribbon toolbar. + +The following code example shows number formatting usage. + +{% tabs %} +{% highlight js tabtitle="app.jsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/app.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="app.tsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/app.tsx %} +{% endhighlight %} +{% highlight js tabtitle="datasource.jsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/datasource.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="datasource.tsx" %} +{% include code-snippet/spreadsheet/react/numberformat-cs1/app/datasource.tsx %} +{% endhighlight %} +{% endtabs %} + +{% previewsample "/document-processing/code-snippet/spreadsheet/react/numberformat-cs1" %} diff --git a/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md b/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md new file mode 100644 index 0000000000..76b7660aa5 --- /dev/null +++ b/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md @@ -0,0 +1,60 @@ +--- +layout: post +title: Text & Cell Formatting in React Spreadsheet component | Syncfusion +description: Text and cell formatting options such as fonts, alignment, indents, fill color and borders. +control: Formatting +platform: document-processing +documentation: ug +--- + +## Text and cell formatting + +Text and cell formatting enhances the look and feel of your cell. It helps to highlight a particular cell or range of cells from a whole workbook. You can apply formats like font size, font family, font color, text alignment, border etc. to a cell or range of cells. Use the [`allowCellFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#allowcellformatting) property to enable or disable the text and cell formatting option in Spreadsheet. + +You can set formats in the following ways: + +- Using the `style` property to set formats at initial load. +- Using the [`cellFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#cellformat) method to set formats to a cell or range. +- Using formatting options from the ribbon toolbar. + +### Fonts + +Supported font options: font-family, font-size, bold, italic, strike-through, underline and font color. + +### Text Alignment + +Align text in a cell either vertically or horizontally using the `textAlign` and `verticalAlign` properties. + +### Indents + +Change the indentation of cell content using the `textIndent` property. + +### Fill color + +Apply background color to highlight a cell or range using the `backgroundColor` property. + +### Borders + +You can add borders around a cell or range of cells to define a section of worksheet or a table. To know more about borders, see [Borders](./border). + +{% tabs %} +{% highlight js tabtitle="app.jsx" %} +{% include code-snippet/spreadsheet/react/cellformat-cs1/app/app.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="app.tsx" %} +{% include code-snippet/spreadsheet/react/cellformat-cs1/app/app.tsx %} +{% endhighlight %} +{% highlight js tabtitle="datasource.jsx" %} +{% include code-snippet/spreadsheet/react/cellformat-cs1/app/datasource.jsx %} +{% endhighlight %} +{% highlight ts tabtitle="datasource.tsx" %} +{% include code-snippet/spreadsheet/react/cellformat-cs1/app/datasource.tsx %} +{% endhighlight %} +{% endtabs %} + + {% previewsample "/document-processing/code-snippet/spreadsheet/react/cellformat-cs1" %} + +### Limitations of Formatting + +- Insert row/column between the formatting applied cells is not supported. +- Formatting support for row/column is limited. diff --git a/Document-Processing/Excel/Spreadsheet/React/worksheet.md b/Document-Processing/Excel/Spreadsheet/React/worksheet.md index 85419436f3..6229f641fe 100644 --- a/Document-Processing/Excel/Spreadsheet/React/worksheet.md +++ b/Document-Processing/Excel/Spreadsheet/React/worksheet.md @@ -132,6 +132,35 @@ The following code example shows the three types of sheet visibility state. {% previewsample "/document-processing/code-snippet/spreadsheet/react/sheet-visiblity-cs1" %} +## Duplicate sheet + +The Spreadsheet component allows you to create a copy of an existing worksheet along with its data, formatting, and configurations. Duplicating a sheet is useful when you want to reuse the same structure or data without manually recreating it. + +You can duplicate a worksheet in the following way, + +Right-click on the sheet tab, and then select the `Duplicate` option from the context menu. + +When the `Duplicate` option is selected, a new worksheet is created as an exact copy of the selected sheet and is placed next to it. The duplicated sheet will automatically be assigned a unique name to avoid conflicts with existing sheet names. + +![Duplicate sheet](./images/spreadsheet-duplicate.png) + +## Move sheet + +The Spreadsheet component provides options to rearrange worksheets by moving them to the left or right within the sheet tab panel. This helps you organize worksheets in the required order. + +You can move a worksheet using the following way, + +Right-click on the sheet tab, and then select either `Move Left` or `Move Right` option from the context menu. + +Move sheet options + +`Move Left` – Moves the selected worksheet one position to the left. +`Move Right` – Moves the selected worksheet one position to the right. + +The Move Left and Move Right options are enabled only when there are two or more worksheets available in the Spreadsheet. These options are automatically disabled when the selected sheet is already at the first or last position. + +![Move sheet tabs](./images/spreadsheet-move-tab.png) + ## Note You can refer to our [React Spreadsheet](https://www.syncfusion.com/spreadsheet-editor-sdk/react-spreadsheet-editor) feature tour page for its groundbreaking feature representations. You can also explore our [React Spreadsheet example](https://www.syncfusion.com/spreadsheet-editor-sdk/react-spreadsheet-editor) to knows how to present and manipulate data. diff --git a/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.jsx b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.jsx new file mode 100644 index 0000000000..d7116ddd1a --- /dev/null +++ b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.jsx @@ -0,0 +1,71 @@ +import * as React from 'react'; +import { createRoot } from 'react-dom/client'; +import { SpreadsheetComponent } from '@syncfusion/ej2-react-spreadsheet'; +import { CellStyleModel } from '@syncfusion/ej2-react-spreadsheet'; +import { data } from './datasource'; + +function App() { + const spreadsheetRef = React.useRef(null); + const headerStyle = { fontFamily: 'Axettac Demo', verticalAlign: 'middle', textAlign: 'center', fontSize: '18pt', fontWeight: 'bold', color: '#279377', border: '2px solid #e0e0e0' }; + + const onCreated = () => { + const spreadsheet = spreadsheetRef.current; + if (!spreadsheet) return; + // Apply various borders programmatically to demonstrate types + // Top border for first column header cells + spreadsheet.setBorder({ border: '2px dashed #0078d4' }, 'A1', 'Top'); + // Left and Right borders for header row + spreadsheet.setBorder({ border: '1px solid #333' }, 'A3:D12'); + spreadsheet.setBorder({ borderRight: '1px dotted #d14' }, 'E3:E12'); + // Horizontal borders on a block + spreadsheet.setBorder({ border: '1px solid #040404' }, 'A5:E12', 'Horizontal'); + // Vertical borders on a block + spreadsheet.setBorder({ border: '1px solid #888' }, 'B3:B12', 'Vertical'); + // Outside border for a range + spreadsheet.setBorder({ border: '2px solid #000' }, 'B3:B12', 'Outer'); + // Inside borders for a range + spreadsheet.setBorder({ border: '1px dotted #6a1b9a' }, 'E4:E12', 'Inside'); + }; + + // Define sheet model with per-cell border styles + const sheets = [ + { + showGridLines: true, + rows: [ + { height: 40, cells: [{ colSpan: 5, value: 'Order Summary', style: headerStyle }] }, + { + index: 1, + cells: [ + { index: 0, style: { borderLeft: '1px double #0a0', borderBottom: '1px double #0a0' } }, + { index: 1, style: { borderBottom: '1px double #0a0' } }, + { index: 2, style: { borderBottom: '1px double #0a0' } }, + { index: 3, style: { borderBottom: '1px double #0a0' } }, + { index: 4, style: { borderBottom: '1px double #0a0', borderRight: '1px double #0a0' } } + ] + } + ], + ranges: [ + { dataSource: data, startCell: 'A2' } + ], + columns: [ + { width: 100 }, + { width: 200 }, + { width: 110 }, + { width: 140 }, + { width: 90 } + ] + } + ]; + + return ( +

    + + +
    + ); +} + +export default App; + +const root = createRoot(document.getElementById('root')); +root.render(); \ No newline at end of file diff --git a/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.tsx b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.tsx new file mode 100644 index 0000000000..2103c32b2b --- /dev/null +++ b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/app.tsx @@ -0,0 +1,71 @@ +import * as React from 'react'; +import { createRoot } from 'react-dom/client'; +import { SpreadsheetComponent } from '@syncfusion/ej2-react-spreadsheet'; +import { CellStyleModel } from '@syncfusion/ej2-react-spreadsheet'; +import { data } from './datasource'; + +function App(): React.ReactElement { + const spreadsheetRef = React.useRef(null); + const headerStyle: CellStyleModel = { fontFamily: 'Axettac Demo', verticalAlign: 'middle', textAlign: 'center', fontSize: '18pt', fontWeight: 'bold', color: '#279377', border: '2px solid #e0e0e0' }; + + const onCreated = (): void => { + const spreadsheet = spreadsheetRef.current; + if (!spreadsheet) return; + // Apply various borders programmatically to demonstrate types + // Top border for first column header cells + spreadsheet.setBorder({ border: '2px dashed #0078d4' }, 'A1', 'Top'); + // Left and Right borders for header row + spreadsheet.setBorder({ border: '1px solid #333' }, 'A3:D12'); + spreadsheet.setBorder({ borderRight: '1px dotted #d14' }, 'E3:E12'); + // Horizontal borders on a block + spreadsheet.setBorder({ border: '1px solid #040404' }, 'A5:E12', 'Horizontal'); + // Vertical borders on a block + spreadsheet.setBorder({ border: '1px solid #888' }, 'B3:B12', 'Vertical'); + // Outside border for a range + spreadsheet.setBorder({ border: '2px solid #000' }, 'B3:B12', 'Outer'); + // Inside borders for a range + spreadsheet.setBorder({ border: '1px dotted #6a1b9a' }, 'E4:E12', 'Inside'); + }; + + // Define sheet model with per-cell border styles + const sheets = [ + { + showGridLines: true, + rows: [ + { height: 40, cells: [{ colSpan: 5, value: 'Order Summary', style: headerStyle }] }, + { + index: 1, + cells: [ + { index: 0, style: { borderLeft: '1px double #0a0', borderBottom: '1px double #0a0' } }, + { index: 1, style: { borderBottom: '1px double #0a0' } }, + { index: 2, style: { borderBottom: '1px double #0a0' } }, + { index: 3, style: { borderBottom: '1px double #0a0' } }, + { index: 4, style: { borderBottom: '1px double #0a0', borderRight: '1px double #0a0' } } + ] + } + ], + ranges: [ + { dataSource: data, startCell: 'A2' } + ], + columns: [ + { width: 100 }, + { width: 200 }, + { width: 110 }, + { width: 140 }, + { width: 90 } + ] + } + ]; + + return ( +
    + + +
    + ); +} + +export default App; + +const root = createRoot(document.getElementById('root')!); +root.render(); \ No newline at end of file diff --git a/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.jsx b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.jsx new file mode 100644 index 0000000000..ab5edc57dd --- /dev/null +++ b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.jsx @@ -0,0 +1,15 @@ +/** + * Cell formatting data source + */ +export let data = [ + { 'Order Id': 'SF1001', 'Product': 'Laptop Backpack (Blue)', 'Ordered Date': '02/14/2014', 'Ordered By': 'Rahul Sharma', 'Shipment': 'Delivered' }, + { 'Order Id': 'SF1002', 'Product': 'Oppo F1 S mobile back cover', 'Ordered Date': '06/11/2014', 'Ordered By': 'Adi Pathak', 'Shipment': 'Delivered' }, + { 'Order Id': 'SF1003', 'Product': 'Tupperware 4 bottle set', 'Ordered Date': '07/27/2014', 'Ordered By': 'Himani Arora', 'Shipment': 'Pending' }, + { 'Order Id': 'SF1004', 'Product': 'Tupperware Lunch box', 'Ordered Date': '11/21/2014', 'Ordered By': 'Samuel Samson', 'Shipment': 'Shipped' }, + { 'Order Id': 'SF1005', 'Product': 'Panosonic Hair Dryer', 'Ordered Date': '06/23/2014', 'Ordered By': 'Neha', 'Shipment': 'Cancelled' }, + { 'Order Id': 'SF1006', 'Product': 'Philips LED 2 bulb set', 'Ordered Date': '07/22/2014', 'Ordered By': 'Christine J', 'Shipment': 'Pending' }, + { 'Order Id': 'SF1007', 'Product': 'Moto G4 plus headphone', 'Ordered Date': '02/04/2014', 'Ordered By': 'Shiv Nagar', 'Shipment': 'Delivered' }, + { 'Order Id': 'SF1008', 'Product': 'Lakme Eyeliner Pencil', 'Ordered Date': '11/30/2014', 'Ordered By': 'Cherry', 'Shipment': 'Shipped' }, + { 'Order Id': 'SF1009', 'Product': 'Listerine mouthwash', 'Ordered Date': '07/09/2014', 'Ordered By': 'Siddartha Mishra', 'Shipment': 'Pending' }, + { 'Order Id': 'SF1010', 'Product': 'Protinex original', 'Ordered Date': '10/31/2014', 'Ordered By': 'Ravi Chugh', 'Shipment': 'Delivered' }, +]; \ No newline at end of file diff --git a/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.tsx b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.tsx new file mode 100644 index 0000000000..e3dd57d4b2 --- /dev/null +++ b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/app/datasource.tsx @@ -0,0 +1,15 @@ +/** + * Cell formatting data source + */ +export let data: Object[] = [ + { 'Order Id': 'SF1001', 'Product': 'Laptop Backpack (Blue)', 'Ordered Date': '02/14/2014', 'Ordered By': 'Rahul Sharma', 'Shipment': 'Delivered' }, + { 'Order Id': 'SF1002', 'Product': 'Oppo F1 S mobile back cover', 'Ordered Date': '06/11/2014', 'Ordered By': 'Adi Pathak', 'Shipment': 'Delivered' }, + { 'Order Id': 'SF1003', 'Product': 'Tupperware 4 bottle set', 'Ordered Date': '07/27/2014', 'Ordered By': 'Himani Arora', 'Shipment': 'Pending' }, + { 'Order Id': 'SF1004', 'Product': 'Tupperware Lunch box', 'Ordered Date': '11/21/2014', 'Ordered By': 'Samuel Samson', 'Shipment': 'Shipped' }, + { 'Order Id': 'SF1005', 'Product': 'Panosonic Hair Dryer', 'Ordered Date': '06/23/2014', 'Ordered By': 'Neha', 'Shipment': 'Cancelled' }, + { 'Order Id': 'SF1006', 'Product': 'Philips LED 2 bulb set', 'Ordered Date': '07/22/2014', 'Ordered By': 'Christine J', 'Shipment': 'Pending' }, + { 'Order Id': 'SF1007', 'Product': 'Moto G4 plus headphone', 'Ordered Date': '02/04/2014', 'Ordered By': 'Shiv Nagar', 'Shipment': 'Delivered' }, + { 'Order Id': 'SF1008', 'Product': 'Lakme Eyeliner Pencil', 'Ordered Date': '11/30/2014', 'Ordered By': 'Cherry', 'Shipment': 'Shipped' }, + { 'Order Id': 'SF1009', 'Product': 'Listerine mouthwash', 'Ordered Date': '07/09/2014', 'Ordered By': 'Siddartha Mishra', 'Shipment': 'Pending' }, + { 'Order Id': 'SF1010', 'Product': 'Protinex original', 'Ordered Date': '10/31/2014', 'Ordered By': 'Ravi Chugh', 'Shipment': 'Delivered' }, +]; \ No newline at end of file diff --git a/Document-Processing/code-snippet/spreadsheet/react/border-cs1/index.html b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/index.html new file mode 100644 index 0000000000..8b6e016434 --- /dev/null +++ b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/index.html @@ -0,0 +1,36 @@ + + + + + Syncfusion React Spreadsheet + + + + + + + + + + + + +
    +
    Loading....
    +
    + + + \ No newline at end of file diff --git a/Document-Processing/code-snippet/spreadsheet/react/border-cs1/systemjs.config.js b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/systemjs.config.js new file mode 100644 index 0000000000..9290509c4a --- /dev/null +++ b/Document-Processing/code-snippet/spreadsheet/react/border-cs1/systemjs.config.js @@ -0,0 +1,58 @@ +System.config({ + transpiler: "ts", + typescriptOptions: { + target: "es5", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true, + "jsx": "react" + }, + meta: { + 'typescript': { + "exports": "ts" + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/32.1.19/" + }, + map: { + app: 'app', + ts: "https://unpkg.com/plugin-typescript@4.0.10/lib/plugin.js", + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-notifications": "syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-charts": "syncfusion:ej2-charts/dist/ej2-charts.umd.min.js", + "@syncfusion/ej2-svg-base": "syncfusion:ej2-svg-base/dist/ej2-svg-base.umd.min.js", + "@syncfusion/ej2-spreadsheet": "syncfusion:ej2-spreadsheet/dist/ej2-spreadsheet.umd.min.js", + "@syncfusion/ej2-react-base": "syncfusion:ej2-react-base/dist/ej2-react-base.umd.min.js", + "@syncfusion/ej2-react-spreadsheet": "syncfusion:ej2-react-spreadsheet/dist/ej2-react-spreadsheet.umd.min.js", + "react-dom/client": "https://unpkg.com/react-dom@18.2.0/umd/react-dom.production.min.js", + "react-dom": "https://unpkg.com/react-dom@18.2.0/umd/react-dom.production.min.js", + "react": "https://unpkg.com/react@18.2.0/umd/react.production.min.js", + + }, + packages: { + 'app': { main: 'app', defaultExtension: 'tsx' }, + } + +}); + +System.import('app'); + + + From a763bc0d02a2cafdda6d67bd907154dee1cbdf7c Mon Sep 17 00:00:00 2001 From: NithishkumarRavikumar Date: Wed, 1 Apr 2026 17:07:40 +0530 Subject: [PATCH 2/3] 1019334: added and updated the existing contents and Formatting Content --- .../React/custom-number-formatting.md | 8 ++++---- .../Spreadsheet/React/number-formatting.md | 8 ++++---- .../Spreadsheet/React/text-cell-formatting.md | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md b/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md index 414f2961ef..59039dafa6 100644 --- a/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md +++ b/Document-Processing/Excel/Spreadsheet/React/custom-number-formatting.md @@ -1,13 +1,13 @@ --- layout: post -title: Custom & Culture Number Formats | Syncfusion React Spreadsheet -description: Custom number formats and culture-aware formats in Syncfusion React Spreadsheet. +title: Custom and Culture Number Formats | Syncfusion React Spreadsheet +description: Custom number formats and culture-based formats in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more. control: Formatting platform: document-processing documentation: ug --- -## Custom Number Formatting +# Custom Number Formatting Spreadsheet supports custom number formats to display your data as numbers, dates, times, percentages, and currency values. If the pre-defined number formats do not meet your needs, you can set your own custom formats using custom number formats dialog or `numberFormat` method. @@ -53,7 +53,7 @@ The different types of custom number format populated in the custom number forma | Accounting | `_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)` | 43 | Custom Number formatting can be applied in following ways, -* Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#numberformat) method, you can set your own custom number format to a cell or range of cells. +* Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#numberformat) method, you can set your own custom number format to a cell or range of cells. * Selecting the custom number format option from custom number formats dialog or type your own format in dialog input and then click apply button. It will apply the custom format for selected cells. The following code example shows the number formatting in cell data. diff --git a/Document-Processing/Excel/Spreadsheet/React/number-formatting.md b/Document-Processing/Excel/Spreadsheet/React/number-formatting.md index e99d7cd316..2cfda77e90 100644 --- a/Document-Processing/Excel/Spreadsheet/React/number-formatting.md +++ b/Document-Processing/Excel/Spreadsheet/React/number-formatting.md @@ -1,15 +1,15 @@ --- layout: post title: Number Formatting in React Spreadsheet component | Syncfusion -description: Number formatting options in the Syncfusion React Spreadsheet component. +description: Learn here all about Number formatting in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more. control: Formatting platform: document-processing documentation: ug --- -## Number Formatting +# Number Formatting -Number formatting provides a type for your data in the Spreadsheet. Use the [`allowNumberFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#allownumberformatting) property to enable or disable the number formatting option in the Spreadsheet. +Number formatting provides a type for your data in the Spreadsheet. Use the [`allowNumberFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allownumberformatting) property to enable or disable the number formatting option in the Spreadsheet. The different types of number formatting supported in Spreadsheet are: @@ -30,7 +30,7 @@ The different types of number formatting supported in Spreadsheet are: Number formatting can be applied in the following ways: - Using the `format` property in `cell`, you can set the desired format to each cell at initial load. -- Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#numberformat) method, you can set the number format to a cell or range of cells. +- Using the [`numberFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#numberformat) method, you can set the number format to a cell or range of cells. - Selecting the number format option from the ribbon toolbar. The following code example shows number formatting usage. diff --git a/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md b/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md index 76b7660aa5..cf3cee7418 100644 --- a/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md +++ b/Document-Processing/Excel/Spreadsheet/React/text-cell-formatting.md @@ -1,39 +1,39 @@ --- layout: post title: Text & Cell Formatting in React Spreadsheet component | Syncfusion -description: Text and cell formatting options such as fonts, alignment, indents, fill color and borders. +description: Learn here all about Text and cell formatting in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more. control: Formatting platform: document-processing documentation: ug --- -## Text and cell formatting +# Text and cell formatting -Text and cell formatting enhances the look and feel of your cell. It helps to highlight a particular cell or range of cells from a whole workbook. You can apply formats like font size, font family, font color, text alignment, border etc. to a cell or range of cells. Use the [`allowCellFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#allowcellformatting) property to enable or disable the text and cell formatting option in Spreadsheet. +Text and cell formatting enhances the look and feel of your cell. It helps to highlight a particular cell or range of cells from a whole workbook. You can apply formats like font size, font family, font color, text alignment, border etc. to a cell or range of cells. Use the [`allowCellFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allowcellformatting) property to enable or disable the text and cell formatting option in Spreadsheet. You can set formats in the following ways: - Using the `style` property to set formats at initial load. -- Using the [`cellFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/#cellformat) method to set formats to a cell or range. +- Using the [`cellFormat`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#cellformat) method to set formats to a cell or range. - Using formatting options from the ribbon toolbar. -### Fonts +## Fonts Supported font options: font-family, font-size, bold, italic, strike-through, underline and font color. -### Text Alignment +## Text Alignment Align text in a cell either vertically or horizontally using the `textAlign` and `verticalAlign` properties. -### Indents +## Indents Change the indentation of cell content using the `textIndent` property. -### Fill color +## Fill color Apply background color to highlight a cell or range using the `backgroundColor` property. -### Borders +## Borders You can add borders around a cell or range of cells to define a section of worksheet or a table. To know more about borders, see [Borders](./border). @@ -54,7 +54,7 @@ You can add borders around a cell or range of cells to define a section of works {% previewsample "/document-processing/code-snippet/spreadsheet/react/cellformat-cs1" %} -### Limitations of Formatting +## Limitations of Formatting - Insert row/column between the formatting applied cells is not supported. - Formatting support for row/column is limited. From ede788557e869f01bd133a3a040b601a3e6c2573 Mon Sep 17 00:00:00 2001 From: NithishkumarRavikumar Date: Wed, 1 Apr 2026 17:19:26 +0530 Subject: [PATCH 3/3] 1019334: content enhancement with formatting topic segmentation --- .../Excel/Spreadsheet/React/number-formatting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/Excel/Spreadsheet/React/number-formatting.md b/Document-Processing/Excel/Spreadsheet/React/number-formatting.md index 2cfda77e90..3d71e0f7b7 100644 --- a/Document-Processing/Excel/Spreadsheet/React/number-formatting.md +++ b/Document-Processing/Excel/Spreadsheet/React/number-formatting.md @@ -7,7 +7,7 @@ platform: document-processing documentation: ug --- -# Number Formatting +# Number Formatting in React Spreadsheet component Number formatting provides a type for your data in the Spreadsheet. Use the [`allowNumberFormatting`](https://ej2.syncfusion.com/react/documentation/api/spreadsheet#allownumberformatting) property to enable or disable the number formatting option in the Spreadsheet.