// Copyright 2022 - 2026 The excelize-wasm Authors. All rights reserved. Use of
// this source code is governed by a BSD-style license that can be found in
// the LICENSE file.
//
// Package excelize providing a set of functions that allow you to write to and
// read from XLAM / XLSM / XLSX / XLTM / XLTX files. Supports reading and
// writing spreadsheet documents generated by Microsoft Excel™ 2007 and later.
// Supports complex components by high compatibility.
//
// Type definitions for excelize-wasm

declare module 'excelize-wasm' {

  /**
   * AppProperties directly maps the document application properties.
   */
  export type AppProperties = {
    Application?:       string;
    ScaleCrop?:         boolean;
    DocSecurity?:       number;
    Company?:           string;
    LinksUpToDate?:     boolean;
    HyperlinksChanged?: boolean;
    AppVersion?:        string;
  };

  /**
   * This section defines the currently supported country code types
   * enumeration for apply number format.
   */
  export enum CultureName {
    CultureNameUnknown,
    CultureNameEnUS,
    CultureNameJaJP,
    CultureNameKoKR,
    CultureNameZhCN,
    CultureNameZhTW,
  }

  /**
   * This section defines the cell value types enumeration.
   */
  export enum CellType {
    CellTypeUnset,
    CellTypeBool,
    CellTypeDate,
    CellTypeError,
    CellTypeFormula,
    CellTypeInlineString,
    CellTypeNumber,
    CellTypeSharedString,
  }

  /**
   * FormControlType is the type of supported form controls.
   */
  export enum FormControlType {
    FormControlNote,
    FormControlButton,
    FormControlOptionButton,
    FormControlSpinButton,
    FormControlCheckBox,
    FormControlGroupBox,
    FormControlLabel,
    FormControlScrollBar,
  }

  /**
   * LineDashType defines the currently supported line dash types enumeration.
   */
  export enum LineDashType {
    LineDashUnset,
    LineDashSolid,
    LineDashDot,
    LineDashDash,
    LineDashLgDash,
    LineDashSashDot,
    LineDashLgDashDot,
    LineDashLgDashDotDot,
    LineDashSysDash,
    LineDashSysDot,
    LineDashSysDashDot,
    LineDashSysDashDotDot,
  }

  /**
   * LineType defines the currently supported line types enumeration.
   */
  export enum LineType {
    LineUnset,
    LineSolid,
    LineNone,
    LineAutomatic,
  }

  /**
   * Options define the options for o`pen and reading spreadsheet.
   *
   * MaxCalcIterations specifies the maximum iterations for iterative
   * calculation, the default value is 0.
   *
   * Password specifies the password of the spreadsheet in plain text.
   *
   * RawCellValue specifies if apply the number format for the cell value or get
   * the raw value.
   *
   * UnzipSizeLimit specifies the unzip size limit in bytes on open the
   * spreadsheet, this value should be greater than or equal to
   * UnzipXMLSizeLimit, the default size limit is 16GB.
   *
   * UnzipXMLSizeLimit specifies the memory limit on unzipping worksheet and
   * shared string table in bytes, worksheet XML will be extracted to system
   * temporary directory when the file size is over this value, this value
   * should be less than or equal to UnzipSizeLimit, the default value is
   * 16MB.
   *
   * TmpDir specifies the temporary directory for creating temporary files, if
   * the value is empty, the system default temporary directory will be used.
   *
   * ShortDatePattern specifies the short date number format code. In the
   * spreadsheet applications, date formats display date and time serial numbers
   * as date values. Date formats that begin with an asterisk (*) respond to
   * changes in regional date and time settings that are specified for the
   * operating system. Formats without an asterisk are not affected by operating
   * system settings. The ShortDatePattern used for specifies apply date formats
   * that begin with an asterisk.
   *
   * LongDatePattern specifies the long date number format code.
   *
   * LongTimePattern specifies the long time number format code.
   *
   * CultureInfo specifies the country code for applying built-in language
   * number format code these effect by the system's local language settings.
   */
  export type Options = {
    MaxCalcIterations?: number;
    Password?:          string;
    RawCellValue?:      boolean;
    UnzipSizeLimit?:    number;
    UnzipXMLSizeLimit?: number;
    TmpDir?:            string;
    ShortDatePattern?:  string;
    LongDatePattern?:   string;
    LongTimePattern?:   string;
    CultureInfo?:       CultureName;
  };

  /**
   * Border directly maps the border settings of the cells.
   */
  export type Border = {
    Type?:  string;
    Color?: string;
    Style?: number;
  };

  /**
   * Fill directly maps the fill settings of the cells.
   */
  export type Fill = {
    Type?:         string;
    Pattern?:      number;
    Color?:        string[];
    Shading?:      number;
    Transparency?: number;
  };

  /**
   * Font directly maps the font settings of the fonts.
   */
  export type Font = {
    Bold?:         boolean;
    Italic?:       boolean;
    Underline?:    string;
    Family?:       string;
    Size?:         number;
    Strike?:       boolean;
    Color?:        string;
    ColorIndexed?: number;
    ColorTheme?:   number;
    ColorTint?:    number;
    VertAlign?:    string;
  };

  /**
   * Alignment directly maps the alignment settings of the cells.
   */
  export type Alignment = {
    Horizontal?:      string;
    Indent?:          number;
    JustifyLastLine?: boolean;
    ReadingOrder?:    number;
    RelativeIndent?:  number;
    ShrinkToFit?:     boolean;
    TextRotation?:    number;
    Vertical?:        string;
    WrapText?:        boolean;
  };

  /**
   * Protection directly maps the protection settings of the cells.
   */
  export type Protection = {
    Hidden?: boolean;
    Locked?: boolean;
  };

  /**
   * Style directly maps the style settings of the cells.
   */
  export type Style = {
    Border?:        Border[];
    Fill?:          Fill;
    Font?:          Font;
    Alignment?:     Alignment;
    Protection?:    Protection;
    NumFmt?:        number;
    DecimalPlaces?: number;
    CustomNumFmt?:  string;
    NegRed?:        boolean;
  };

  /**
   * Selection directly maps the settings of the worksheet selection.
   */
  export type Selection = {
    SQRef?:      string;
    ActiveCell?: string;
    Pane?:       string;
  };

  /**
   * Panes directly maps the settings of the panes.
   */
  export type Panes = {
    Freeze?:      boolean;
    Split?:       boolean;
    XSplit?:      number;
    YSplit?:      number;
    TopLeftCell?: string;
    ActivePane?:  string;
    Selection?:   Selection[];
  };

  /**
   * ConditionalFormatOptions directly maps the conditional format settings of
   * the cells.
   */
  export type ConditionalFormatOptions = {
    Type?:           string;
    AboveAverage?:   boolean;
    Percent?:        boolean;
    Format?:         number;
    Criteria?:       string;
    Value?:          string;
    MinType?:        string;
    MidType?:        string;
    MaxType?:        string;
    MinValue?:       string;
    MidValue?:       string;
    MaxValue?:       string;
    MinColor?:       string;
    MidColor?:       string;
    MaxColor?:       string;
    BarColor?:       string;
    BarBorderColor?: string;
    BarDirection?:   string;
    BarOnly?:        boolean;
    BarSolid?:       boolean;
    IconStyle?:      string;
    ReverseIcons?:   boolean;
    IconsOnly?:      boolean;
    StopIfTrue?:     boolean;
  };

  /**
   * CustomProperty directly maps the custom property of the workbook. The value
   * date type may be one of the following: number, boolean, string or null.
   */
  export type CustomProperty = {
    Name:   string;
    Value?: boolean | number | string | null;
  };

  /**
   * Shape directly maps the format settings of the shape.
   */
  export type Shape = {
    Cell:       string;
    Type?:      string;
    Macro?:     string;
    Width?:     number;
    Height?:    number;
    Format?:    GraphicOptions;
    Fill?:      Fill;
    Line?:      LineOptions;
    Paragraph?: RichTextRun[];
  };

  /**
   * SlicerOptions represents the settings of the slicer.
   *
   * Name specifies the slicer name, should be an existing field name of the
   * given table or pivot table, this setting is required.
   *
   * Cell specifies the left top cell coordinates the position for inserting the
   * slicer, this setting is required.
   *
   * TableSheet specifies the worksheet name of the table or pivot table, this
   * setting is required.
   *
   * TableName specifies the name of the table or pivot table, this setting is
   * required.
   *
   * Caption specifies the caption of the slicer, this setting is optional.
   *
   * Macro used for set macro for the slicer, the workbook extension should be
   * XLSM or XLTM.
   *
   * Width specifies the width of the slicer, this setting is optional.
   *
   * Height specifies the height of the slicer, this setting is optional.
   *
   * DisplayHeader specifies if display header of the slicer, this setting is
   * optional, the default setting is display.
   *
   * ItemDesc specifies descending (Z-A) item sorting, this setting is optional,
   * and the default setting is false (represents ascending).
   *
   * Format specifies the format of the slicer, this setting is optional.
   *
   * SelectedItems option is used to specify the default selected items in a
   * slicer. It is currently only supported for slicers in pivot tables. The
   * selected items must fall within the range of items selected in the pivot
   * table. If the pivot table is created using the AddPivotTable function, the
   * same field must also have its selected item range specified at the time the
   * pivot table is created.
   */
  export type SlicerOptions = {
    Name:           string;
    Cell:           string;
    TableSheet:     string;
    TableName:      string;
    Caption?:       string;
    Macro?:         string;
    Width?:         number;
    Height?:        number;
    DisplayHeader?: boolean;
    ItemDesc?:      boolean;
    Format?:        GraphicOptions;
    SelectedItems?: string[];
  };

  /**
   * SparklineOptions directly maps the settings of the sparkline.
   */
  export type SparklineOptions = {
    Location?:      string[];
    Range?:         string[];
    Max?:           number;
    CustMax?:       number;
    Min?:           number;
    CustMin?:       number;
    Type?:          string;
    Weight?:        number;
    DateAxis?:      boolean;
    Markers?:       boolean;
    High?:          boolean;
    Low?:           boolean;
    First?:         boolean;
    Last?:          boolean;
    Negative?:      boolean;
    Axis?:          boolean;
    Hidden?:        boolean;
    Reverse?:       boolean;
    Style?:         number;
    SeriesColor?:   string;
    NegativeColor?: string;
    MarkersColor?:  string;
    FirstColor?:    string;
    LastColor?:     string;
    HightColor?:    string;
    LowColor?:      string;
    EmptyCells?:    string;
  };

  /**
   * GraphicOptions directly maps the format settings of the picture.
   */
  export type GraphicOptions = {
    AltText?:             string;
    Name?:                string;
    PrintObject?:         boolean;
    Locked?:              boolean;
    LockAspectRatio?:     boolean;
    AutoFit?:             boolean;
    AutoFitIgnoreAspect?: boolean;
    OffsetX?:             number;
    OffsetY?:             number;
    ScaleX?:              number;
    ScaleY?:              number;
    Hyperlink?:           string;
    HyperlinkType?:       string;
    Positioning?:         string;
  };

  /**
   * TableOptions directly maps the format settings of the table.
   */
  export type TableOptions = {
    Range:              string;
    Name?:              string;
    StyleName?:         string;
    ShowFirstColumn?:   boolean;
    ShowLastColumn?:    boolean;
    ShowRowStripes?:    boolean;
    ShowColumnStripes?: boolean;
  };

  /**
   * AutoFilterOptions directly maps the auto filter settings.
   */
  export type AutoFilterOptions = {
    Column?:     string;
    Expression?: string;
  };

  /**
   * FormControl directly maps the form controls information.
   */
  export type FormControl = {
    Cell:          string;
    Macro?:        string;
    Width?:        number;
    Height?:       number;
    Checked?:      boolean;
    CurrentVal?:   number;
    MinVal?:       number;
    MaxVal?:       number;
    IncChange?:    number;
    PageChange?:   number;
    Horizontally?: boolean;
    CellLink?:     string;
    Text?:         string;
    Paragraph?:    RichTextRun[];
    Type?:         FormControlType;
    Format?:       GraphicOptions;
  };

  /**
   * LineOptions directly maps the format settings of the line.
   */
  export type LineOptions = {
    Type?:   LineType;
    Dash?:   LineDashType;
    Fill?:   Fill;
    Smooth?: boolean;
    Width?:  number;
  };

  /*
   * ChartNumFmt directly maps the number format settings of the chart.
   */
  export type ChartNumFmt = {
    CustomNumFmt?: string;
    SourceLinked?: boolean;
  };

  /*
   * ChartTitle directly maps the format settings of the chart title.
   */
  export type ChartTitle = {
    Fill?:      Fill;
    Border?:    LineOptions;
    Paragraph?: RichTextRun[];
    Font?:      Font;
    Formula?:   string;
    OffsetX?:   number;
    OffsetY?:   number;
    Width?:     number;
    Height?:    number;
    Overlay?:   boolean;
  };

  /**
   * ChartAxis directly maps the format settings of the chart axis.
   */
  export type ChartAxis = {
    None?:              boolean;
    DropLines?:         boolean;
    HighLowLines?:      boolean;
    MajorGridLines?:    boolean;
    MinorGridLines?:    boolean;
    MajorUnit?:         number;
    TickLabelPosition?: ChartTickLabelPositionType;
    TickLabelSkip?:     number;
    ReverseOrder?:      boolean;
    Secondary?:         boolean;
    Maximum?:           number;
    Minimum?:           number;
    Alignment?:         Alignment;
    Font?:              Font;
    LogBase?:           number;
    NumFmt?:            ChartNumFmt;
    Title?:             ChartTitle;
  };

  /**
   * ChartDimension directly maps the dimension of the chart.
   */
  export type ChartDimension = {
    Width?:  number;
    Height?: number;
  };

  /**
   * ChartUpDownBar directly maps the format settings of the stock chart up bars
   * and down bars.
   */
  export type ChartUpDownBar = {
    Fill?:   Fill;
    Border?: LineOptions;
  };

  /**
   * ChartPlotArea directly maps the format settings of the plot area.
   */
  export type ChartPlotArea = {
    SecondPlotValues?:  number;
    ShowBubbleSize?:    boolean;
    ShowCatName?:       boolean;
    ShowDataTable?:     boolean;
    ShowDataTableKeys?: boolean;
    ShowLeaderLines?:   boolean;
    ShowPercent?:       boolean;
    ShowSerName?:       boolean;
    ShowVal?:           boolean;
    Fill?:              Fill;
    UpBars?:            ChartUpDownBar;
    DownBars?:          ChartUpDownBar;
    NumFmt?:            ChartNumFmt;
  };

  /**
   * ChartType defines the currently supported chart types enumeration.
   */
  export enum ChartType {
    Area,
    AreaStacked,
    AreaPercentStacked,
    Area3D,
    Area3DStacked,
    Area3DPercentStacked,
    Bar,
    BarStacked,
    BarPercentStacked,
    Bar3DClustered,
    Bar3DStacked,
    Bar3DPercentStacked,
    Bar3DConeClustered,
    Bar3DConeStacked,
    Bar3DConePercentStacked,
    Bar3DPyramidClustered,
    Bar3DPyramidStacked,
    Bar3DPyramidPercentStacked,
    Bar3DCylinderClustered,
    Bar3DCylinderStacked,
    Bar3DCylinderPercentStacked,
    Col,
    ColStacked,
    ColPercentStacked,
    Col3D,
    Col3DClustered,
    Col3DStacked,
    Col3DPercentStacked,
    Col3DCone,
    Col3DConeClustered,
    Col3DConeStacked,
    Col3DConePercentStacked,
    Col3DPyramid,
    Col3DPyramidClustered,
    Col3DPyramidStacked,
    Col3DPyramidPercentStacked,
    Col3DCylinder,
    Col3DCylinderClustered,
    Col3DCylinderStacked,
    Col3DCylinderPercentStacked,
    Doughnut,
    Line,
    Line3D,
    Pie,
    Pie3D,
    PieOfPie,
    BarOfPie,
    Radar,
    Scatter,
    Surface3D,
    WireframeSurface3D,
    Contour,
    WireframeContour,
    Bubble,
    Bubble3D,
    StockHighLowClose,
    StockOpenHighLowClose,
  }

  /**
   * ChartDataLabelPositionType is the type of chart data labels position.
   */
  export enum ChartDataLabelPositionType {
    ChartDataLabelsPositionUnset,
    ChartDataLabelsPositionBestFit,
    ChartDataLabelsPositionBelow,
    ChartDataLabelsPositionCenter,
    ChartDataLabelsPositionInsideBase,
    ChartDataLabelsPositionInsideEnd,
    ChartDataLabelsPositionLeft,
    ChartDataLabelsPositionOutsideEnd,
    ChartDataLabelsPositionRight,
    ChartDataLabelsPositionAbove,
  }

  /**
   * ChartTickLabelPositionType is the type of supported chart tick label
   * position types.
   */
  export enum ChartTickLabelPositionType {
    ChartTickLabelNextToAxis,
    ChartTickLabelHigh,
    ChartTickLabelLow,
    ChartTickLabelNone,
  }

  /**
   * Chart directly maps the format settings of the chart.
   */
  export type Chart = {
    Type:          ChartType;
    Series?:       ChartSeries[];
    Format?:       GraphicOptions;
    Dimension?:    ChartDimension;
    Legend?:       ChartLegend;
    Title?:        ChartTitle;
    VaryColors?:   boolean;
    XAxis?:        ChartAxis;
    YAxis?:        ChartAxis;
    PlotArea?:     ChartPlotArea;
    Fill?:         Fill;
    Border?:       LineOptions;
    ShowBlanksAs?: string;
    BubbleSize?:   number;
    HoleSize?:     number;
    GapWidth?:     number;
    Overlap?:      number;
  };

  /**
   * ChartLegend directly maps the format settings of the chart legend.
   */
  export type ChartLegend = {
    Position?:      string
    ShowLegendKey?: boolean;
    Font?:          Font;
  };

  /**
   * ChartMarker directly maps the format settings of the chart marker.
   */
  export type ChartMarker = {
    Border?: LineOptions;
    Fill?:   Fill;
    Symbol?: string;
    Size?:   number;
  };

  /*
   * ChartDataLabel directly maps the format settings of the chart labels.
   */
  export type ChartDataLabel = {
    Alignment?: Alignment;
    Font?:      Font;
    Fill?:      Fill;
  };

  /**
   * ChartDataPoint directly maps the format settings of the chart data point
   * for doughnut, pie and 3D pie charts.
   */
  export type ChartDataPoint = {
    Index: number;
    Fill:  Fill;
  };

  /**
   * ChartSeries directly maps the format settings of the chart series.
   */
  export type ChartSeries = {
    Name?:              string;
    Categories?:        string;
    Values?:            string;
    Sizes?:             string;
    Fill?:              Fill;
    Legend?:            ChartLegend;
    Line?:              LineOptions;
    Marker?:            ChartMarker;
    DataLabel?:         ChartDataLabel;
    DataLabelPosition?: ChartDataLabelPositionType;
    DataPoint?:         ChartDataPoint[];
  };

  /**
   * HeaderFooterImagePositionType is the type of header and footer image
   * position.
   */
  export enum HeaderFooterImagePositionType {
    HeaderFooterImagePositionLeft,
    HeaderFooterImagePositionCenter,
    HeaderFooterImagePositionRight,
  }

  /**
   * IgnoredErrorsType is the type of ignored errors.
   */
  export enum IgnoredErrorsType {
    IgnoredErrorsEvalError,
    IgnoredErrorsTwoDigitTextYear,
    IgnoredErrorsNumberStoredAsText,
    IgnoredErrorsFormula,
    IgnoredErrorsFormulaRange,
    IgnoredErrorsUnlockedFormula,
    IgnoredErrorsEmptyCellReference,
    IgnoredErrorsListDataValidation,
    IgnoredErrorsCalculatedColumn,
  }

  /**
   * HeaderFooterImageOptions defines the settings for an image to be accessible
   * from the worksheet header and footer options.
   */
  export type HeaderFooterImageOptions = {
    Position?:  HeaderFooterImagePositionType;
    File:      Uint8Array;
    IsFooter?:  boolean;
    FirstPage?: boolean;
    Extension: string;
    Width?:     string;
    Height?:    string;
  };

  /**
   * PivotTableOptions directly maps the format settings of the pivot table.
   *
   *  PivotTableStyleName: The built-in pivot table style names
   *
   *  PivotStyleLight1 - PivotStyleLight28
   *  PivotStyleMedium1 - PivotStyleMedium28
   *  PivotStyleDark1 - PivotStyleDark28
   */
  export type PivotTableOptions = {
    DataRange?:           string;
    PivotTableRange?:     string;
    Name?:                string;
    Rows?:                PivotTableField[];
    Columns?:             PivotTableField[];
    Data?:                PivotTableField[];
    Filter?:              PivotTableField[];
    RowGrandTotals?:      boolean;
    ColGrandTotals?:      boolean;
    ShowDrill?:           boolean;
    UseAutoFormatting?:   boolean;
    PageOverThenDown?:    boolean;
    MergeItem?:           boolean;
    ClassicLayout?:       boolean;
    CompactData ?:        boolean;
    ShowError?:           boolean;
    ShowRowHeaders?:      boolean;
    ShowColHeaders?:      boolean;
    ShowRowStripes?:      boolean;
    ShowColStripes?:      boolean;
    ShowLastColumn?:      boolean;
    FieldPrintTitles?:    boolean;
    ItemPrintTitles?:     boolean;
    PivotTableStyleName?: string;
  };

  /**
   * PivotTableShowValuesAsType defines the calculation type enumeration.
   */
  export enum PivotTableShowValuesAsType {
    PivotTableShowValuesAsNoCalculation,
    PivotTableShowValuesAsPercentOfGrandTotal,
    PivotTableShowValuesAsPercentOfColumnTotal,
    PivotTableShowValuesAsPercentOfRowTotal,
    PivotTableShowValuesAsPercentOf,
    PivotTableShowValuesAsPercentOfParentRowTotal,
    PivotTableShowValuesAsPercentOfParentColumnTotal,
    PivotTableShowValuesAsPercentOfParentTotal,
    PivotTableShowValuesAsDifferenceFrom,
    PivotTableShowValuesAsPercentDifferenceFrom,
    PivotTableShowValuesAsRunningTotalIn,
    PivotTableShowValuesAsPercentRunningTotalIn,
    PivotTableShowValuesAsRankSmallestToLargest,
    PivotTableShowValuesAsRankLargestToSmallest,
    PivotTableShowValuesAsIndex,
  }

  /**
   * PivotTableShowValuesAs directly maps the show value as settings of the
   * pivot table.
   */
  export type PivotTableShowValuesAs = {
    Type?:      PivotTableShowValuesAsType;
    BaseField?: string;
    BaseItem?:  string;
  };

  /**
   * PivotTableField directly maps the field settings of the pivot table.
   *
   * Name specifies the name of the data field. Maximum 255 characters
   * are allowed in data field name, excess characters will be truncated.
   *
   * Subtotal specifies the aggregation function that applies to this data
   * field. The default value is sum. The possible values for this attribute
   * are:
   *
   *     Average
   *     Count
   *     CountNums
   *     Max
   *     Min
   *     Product
   *     StdDev
   *     StdDevp
   *     Sum
   *     Var
   *     Varp
   *
   * NumFmt specifies the number format ID of the data field, this filed only
   * accepts built-in number format ID and does not support custom number format
   * expression currently.
   *
   * SelectedItems specifies the default selected items in a pivot table field.
   * The selected items must be values within the cell range referenced by that
   * field.
   *
   * ShowValuesAs specifies the calculation type for showing values in a pivot
   * table values fields. The possible values for the Type field of ShowValuesAs
   * are:
   *
   * ```typescript
   * PivotTableShowValuesAsNoCalculation
   * PivotTableShowValuesAsPercentOfGrandTotal
   * PivotTableShowValuesAsPercentOfColumnTotal
   * PivotTableShowValuesAsPercentOfRowTotal
   * PivotTableShowValuesAsPercentOf
   * PivotTableShowValuesAsPercentOfParentRowTotal
   * PivotTableShowValuesAsPercentOfParentColumnTotal
   * PivotTableShowValuesAsPercentOfParentTotal
   * PivotTableShowValuesAsDifferenceFrom
   * PivotTableShowValuesAsPercentDifferenceFrom
   * PivotTableShowValuesAsRunningTotalIn
   * PivotTableShowValuesAsPercentRunningTotalIn
   * PivotTableShowValuesAsRankSmallestToLargest
   * PivotTableShowValuesAsRankLargestToSmallest
   * PivotTableShowValuesAsIndex
   * ```
   *
   * Note that the base field and base item settings of ShowValuesAs are only
   * required for some calculation types, the calculation types requires base
   * field settings are:
   *
   * ```typescript
   * PivotTableShowValuesAsPercentOf
   * PivotTableShowValuesAsPercentOfParentTotal
   * PivotTableShowValuesAsDifferenceFrom
   * PivotTableShowValuesAsPercentDifferenceFrom
   * PivotTableShowValuesAsRunningTotalIn
   * PivotTableShowValuesAsPercentRunningTotalIn
   * PivotTableShowValuesAsRankSmallestToLargest
   * PivotTableShowValuesAsRankLargestToSmallest
   * ```
   *
   * The supported calculation types requires base item settings are:
   *
   * ```typescript
   * PivotTableShowValuesAsPercentOf
   * PivotTableShowValuesAsDifferenceFrom
   * PivotTableShowValuesAsPercentDifferenceFrom
   * ```
   */
  export type PivotTableField = {
    Compact?:         boolean;
    Data?:            string;
    Name?:            string;
    Outline?:         boolean;
    ShowAll?:         boolean;
    InsertBlankRow?:  boolean;
    Subtotal?:        string;
    DefaultSubtotal?: boolean;
    NumFmt?:          number;
    SelectedItems?:   string[];
    ShowValuesAs?:    PivotTableShowValuesAs;
  };

  /**
   * Comment directly maps the comment information.
   */
  export type Comment = {
    Author?:    string;
    AuthorID?:  number;
    Cell:       string;
    Text?:      string;
    Width?:     number;
    Height?:    number;
    Paragraph?: RichTextRun[];
  };

  /**
   * PictureInsertType defines the type of the picture has been inserted into
   * the worksheet.
   */
  export enum PictureInsertType {
    PictureInsertTypePlaceOverCells,
    PictureInsertTypePlaceInCell,
    PictureInsertTypeDISPIMG,
  }

  /**
   * Picture maps the format settings of the picture.
   */
  export type Picture = {
    Extension: string;
    File: Uint8Array;
    Format: GraphicOptions;
    InsertType: PictureInsertType;
  };

  /**
   * DataValidation directly maps the a single item of data validation defined
   * on a range of the worksheet.
   */
  export type DataValidation = {
    AllowBlank?:       boolean;
    Error?:            string;
    ErrorStyle?:       string;
    ErrorTitle?:       string;
    Operator?:         string
    Prompt?:           string;
    PromptTitle?:      string;
    ShowDropDown?:     boolean;
    ShowErrorMessage?: boolean;
    ShowInputMessage?: boolean;
    Sqref?:            string;
    Type?:             string;
    Formula1?:         string;
    Formula2?:         string;
  };

  /**
   * RichTextRun directly maps the settings of the rich text run.
   */
  export type RichTextRun = {
    Font?: Font;
    Text?: string;
  };

  /**
   * FormulaOptions can be passed to SetCellFormula to use other formula types.
   */
  export type FormulaOptions = {
    Ref?:  string;
    Type?: string;
  };

  /**
   * HyperlinkOpts can be passed to SetCellHyperlink to set optional hyperlink
   * attributes (e.g. display value).
   */
  export type HyperlinkOpts = {
    Display?: string;
    Tooltip?: string;
  };

  /**
   * SheetProtectionOptions directly maps the settings of worksheet protection.
   */
  export type SheetProtectionOptions = {
    AlgorithmName?:       string;
    AutoFilter?:          boolean;
    DeleteColumns?:       boolean;
    DeleteRows?:          boolean;
    EditObjects?:         boolean;
    EditScenarios?:       boolean;
    FormatCells?:         boolean;
    FormatColumns?:       boolean;
    FormatRows?:          boolean;
    InsertColumns?:       boolean;
    InsertHyperlinks?:    boolean;
    InsertRows?:          boolean;
    Password?:            string;
    PivotTables?:         boolean;
    SelectLockedCells?:   boolean;
    SelectUnlockedCells?: boolean;
    Sort?:                boolean;
  };

  /**
   * DefinedName directly maps the name for a cell or cell range on a
   * worksheet.
   */
  export type DefinedName = {
    Name?:     string;
    Comment?:  string;
    RefersTo?: string;
    Scope?:    string;
  };

  /**
   * DocProperties directly maps the document core properties.
   */
  export type DocProperties = {
    Category?:       string;
    ContentStatus?:  string;
    Created?:        string;
    Creator?:        string;
    Description?:    string;
    Identifier?:     string;
    Keywords?:       string;
    LastModifiedBy?: string;
    Modified?:       string;
    Revision?:       string;
    Subject?:        string;
    Title?:          string;
    Language?:       string;
    Version?:        string;
  };

  /**
   * HeaderFooterOptions directly maps the settings of header and footer.
   */
  export type HeaderFooterOptions = {
    AlignWithMargins?: boolean;
    DifferentFirst?:   boolean;
    DifferentOddEven?: boolean;
    ScaleWithDoc?:     boolean;
    OddHeader?:        string;
    OddFooter?:        string;
    EvenHeader?:       string;
    EvenFooter?:       string;
    FirstHeader?:      string;
    FirstFooter?:      string;
  };

  /**
   * MergeCell define a merged cell data.
   */
  export interface MergeCell {
    /**
     * GetCellValue returns merged cell value.
     */
    GetCellValue: () => string;
    /**
     * GetStartAxis returns the top left cell reference of merged range, for
     * example: "C2".
     */
    GetStartAxis: () => string;
    /**
     * GetEndAxis returns the bottom right cell reference of merged range, for
     * example: "D4".
     */
    GetEndAxis: () => string;
  }

  /**
   * PageLayoutOptions directly maps the settings of page layout.
   */
  export type PageLayoutOptions = {
    // Size defines the paper size of the worksheet.
    Size?: number;
    // Orientation defines the orientation of page layout for a worksheet.
    Orientation?: string;
    // FirstPageNumber specified the first printed page number. If no value is
    // specified, then 'automatic' is assumed.
    FirstPageNumber?: number;
    // AdjustTo defines the print scaling. This attribute is restricted to value
    // ranging from 10 (10%) to 400 (400%). This setting is overridden when
    // fitToWidth and/or fitToHeight are in use.
    AdjustTo?: number;
    // FitToHeight specified the number of vertical pages to fit on.
    FitToHeight?: number;
    // FitToWidth specified the number of horizontal pages to fit on.
    FitToWidth?: number;
    // BlackAndWhite specified print black and white.
    BlackAndWhite?: boolean;
    // PageOrder specifies the ordering of multiple pages. Values accepted:
    // overThenDown and downThenOver
    PageOrder?: string;
  };

  /**
   * PageLayoutMarginsOptions directly maps the settings of page layout margins.
   */
  export type PageLayoutMarginsOptions = {
    Bottom?:       number;
    Footer?:       number;
    Header?:       number;
    Left?:         number;
    Right?:        number;
    Top?:          number;
    Horizontally?: boolean;
    Vertically?:   boolean;
  };

  /*
   * SheetPropsOptions directly maps the settings of sheet view.
   */
  export type SheetPropsOptions = {
    // Specifies a stable name of the sheet, which should not change over time,
    // and does not change from user input. This name should be used by code
    // to reference a particular sheet.
    CodeName?: string;
    // EnableFormatConditionsCalculation indicating whether the conditional
    // formatting calculations shall be evaluated. If set to false, then the
    // min/max values of color scales or data bars or threshold values in Top N
    // rules shall not be updated. Essentially the conditional
    // formatting "calc" is off.
    EnableFormatConditionsCalculation?: boolean;
    // Published indicating whether the worksheet is published.
    Published?: boolean;
    // AutoPageBreaks indicating whether the sheet displays Automatic Page
    // Breaks.
    AutoPageBreaks?: boolean;
    // FitToPage indicating whether the Fit to Page print option is enabled.
    FitToPage?: boolean;
    // TabColorIndexed represents the indexed color value.
    TabColorIndexed?: number;
    // TabColorRGB represents the standard Alpha Red Green Blue color value.
    TabColorRGB?: string;
    // TabColorTheme represents the zero-based index into the collection,
    // referencing a particular value expressed in the Theme part.
    TabColorTheme?: number;
    // TabColorTint specifies the tint value applied to the color.
    TabColorTint?: number;
    // OutlineSummaryBelow indicating whether summary rows appear below detail
    // in an outline, when applying an outline.
    OutlineSummaryBelow?: boolean;
    // OutlineSummaryRight indicating whether summary columns appear to the
    // right of detail in an outline, when applying an outline.
    OutlineSummaryRight?: boolean;
    // BaseColWidth specifies the number of characters of the maximum digit
    // width of the normal style's font. This value does not include margin
    // padding or extra padding for grid lines. It is only the number of
    // characters.
    BaseColWidth?: number;
    // DefaultColWidth specifies the default column width measured as the
    // number of characters of the maximum digit width of the normal style's
    // font.
    DefaultColWidth?: number;
    // DefaultRowHeight specifies the default row height measured in point
    // size. Optimization so we don't have to write the height on all rows.
    // This can be written out if most rows have custom height, to achieve the
    // optimization.
    DefaultRowHeight?: number;
    // CustomHeight specifies the custom height.
    CustomHeight?: boolean;
    // ZeroHeight specifies if rows are hidden.
    ZeroHeight?: boolean;
    // ThickTop specifies if rows have a thick top border by default.
    ThickTop?: boolean;
    // ThickBottom specifies if rows have a thick bottom border by default.
    ThickBottom?: boolean;
  };

  export type ViewOptions = {
    // DefaultGridColor indicating that the consuming application should use
    // the default grid lines color(system dependent). Overrides any color
    // specified in colorId.
    DefaultGridColor?: boolean;
    // RightToLeft indicating whether the sheet is in 'right to left' display
    // mode. When in this mode, Column A is on the far right, Column B; is one
    // column left of Column A, and so on. Also, information in cells is
    // displayed in the Right to Left format.
    RightToLeft?: boolean;
    // ShowFormulas indicating whether this sheet should display formulas.
    ShowFormulas?: boolean;
    // ShowGridLines indicating whether this sheet should display grid lines.
    ShowGridLines?: boolean;
    // ShowRowColHeaders indicating whether the sheet should display row and
    // column headings.
    ShowRowColHeaders?: boolean;
    // ShowRuler indicating this sheet should display ruler.
    ShowRuler?: boolean;
    // ShowZeros indicating whether to "show a zero in cells that have zero
    // value". When using a formula to reference another cell which is empty,
    // the referenced value becomes 0 when the flag is true. (Default setting
    // is true.)
    ShowZeros?: boolean;
    // TopLeftCell specifies a location of the top left visible cell Location
    // of the top left visible cell in the bottom right pane (when in
    // Left-to-Right mode).
    TopLeftCell: string;
    // View indicating how sheet is displayed, by default it uses empty string
    // available options: normal, pageLayout, pageBreakPreview
    View: string;
    // ZoomScale specifies a window zoom magnification for current view
    // representing percent values. This attribute is restricted to values
    // ranging from 10 to 400. Horizontal & Vertical scale together.
    ZoomScale?: number;
  };

  /**
   * CalcPropsOptions defines the collection of properties the application uses
   * to record calculation status and details.
   */
  export type CalcPropsOptions = {
    CalcID?:                number;
    CalcMode?:              string;
    FullCalcOnLoad?:        boolean;
    RefMode?:               string;
    Iterate?:               boolean;
    IterateCount?:          number;
    IterateDelta?:          number;
    FullPrecision?:         boolean;
    CalcCompleted?:         boolean;
    CalcOnSave?:            boolean;
    ConcurrentCalc?:        boolean;
    ConcurrentManualCount?: number;
    ForceFullCalc?:         boolean;
  };

  /**
   * WorkbookPropsOptions directly maps the settings of workbook proprieties.
   */
  export type WorkbookPropsOptions = {
    Date1904?:      boolean;
    FilterPrivacy?: boolean;
    CodeName?:      string;
  };

  /**
   * WorkbookProtectionOptions directly maps the settings of workbook
   * protection.
   */
  export type WorkbookProtectionOptions = {
    AlgorithmName?: string;
    Password?:      string;
    LockStructure?: boolean;
    LockWindows?:   boolean;
  };

  /**
   * CellNameToCoordinates converts alphanumeric cell name to [X, Y]
   * coordinates or returns an error.
   * @param cell The cell reference
   */
  export function CellNameToCoordinates(cell: string): { col: number, row: number, error: string | null }

  /**
   * ColumnNameToNumber provides a function to convert Excel sheet column name
   * (case-insensitive) to int. The function returns an error if column name
   * incorrect.
   * @param name The column name
   */
  export function ColumnNameToNumber(name: string): { col: number, error: string | null }

  /**
   * ColumnNumberToName provides a function to convert the integer to Excel
   * sheet column title.
   * @param num The column name
   */
  export function ColumnNumberToName(num: number): { col: string, error: string | null }

  /**
   * CoordinatesToCellName converts [X, Y] coordinates to alpha-numeric cell
   * name or returns an error.
   * @param col The column number
   * @param row The row number
   * @param abs Specifies the absolute cell references
   */
  export function CoordinatesToCellName(col: number, row: number, abs?: boolean): { cell: string, error: string | null }

  /**
   * HSLToRGB converts an HSL triple to a RGB triple.
   * @param h Hue
   * @param s Saturation
   * @param l Lightness
   */
  export function HSLToRGB(h: number, s: number, l: number): { r: number, g: number, b: number, error: string | null }

  /**
   * JoinCellName joins cell name from column name and row number.
   * @param col The column name
   * @param row The row number
   */
  export function JoinCellName(col: string, row: number): { cell: string, error: string | null }

  /**
   * RGBToHSL converts an RGB triple to a HSL triple.
   * @param r Red
   * @param g Green
   * @param b Blue
   */
  export function RGBToHSL(r: number, g: number, b: number): { h: number, s: number, l: number, error: string | null }

  /**
   * SplitCellName splits cell name to column name and row number.
   * @param cell The cell reference
   */
  export function SplitCellName(cell: string): { col: string, row: number, error: string | null }

  /**
   * ThemeColor applied the color with tint value.
   * @param baseColor Base color in hex format
   * @param tint A mixture of a color with white
   */
  export function ThemeColor(baseColor: string, tint: number): { color: string, error: string | null }

  /**
   * NewFile provides a function to create new file by default template.
   * @param opts The options for open and reading spreadsheet
   */
  export function NewFile(opts?: Options): NewFile;

  /**
   * OpenReader read data stream from buffer and return a populated spreadsheet
   * file.
   * @param r The contents buffer of the file
   * @param opts The options for open and reading spreadsheet
   */
  export function OpenReader(r: Uint8Array, opts?: Options): NewFile;

  /**
   * @constructor
   */
  export class NewFile {
    /**
     * AddChart provides the method to add chart in a sheet by given chart
     * format set (such as offset, scale, aspect ratio setting and print
     * settings) and properties set. For example, create 3D clustered column
     * chart with data Sheet1!$E$1:$L$15:
     *
     * ```typescript
     * const { init } = require('excelize-wasm');
     * const fs = require('fs');
     *
     * init('./node_modules/excelize-wasm/excelize.wasm.gz').then((excelize) => {
     *   const f = excelize.NewFile();
     *   if (f.error) {
     *     console.log(f.error);
     *     return;
     *   }
     *   [
     *     [null, 'Apple', 'Orange', 'Pear'],
     *     ['Small', 2, 3, 3],
     *     ['Normal', 5, 2, 4],
     *     ['Large', 6, 7, 8],
     *   ].forEach((row, idx) => {
     *     const ret1 = excelize.CoordinatesToCellName(1, idx + 1);
     *     if (ret1.error) {
     *       console.log(ret1.error);
     *       return;
     *     }
     *     const res2 = f.SetSheetRow('Sheet1', ret1.cell, row);
     *     if (res2.error) {
     *       console.log(res2.error);
     *       return;
     *     }
     *   });
     *   const ret3 = f.AddChart('Sheet1', 'E1', {
     *     Type: excelize.Col3DClustered,
     *     Series: [
     *       {
     *         Name: 'Sheet1!$A$2',
     *         Categories: 'Sheet1!$B$1:$D$1',
     *         Values: 'Sheet1!$B$2:$D$2',
     *       },
     *       {
     *         Name: 'Sheet1!$A$3',
     *         Categories: 'Sheet1!$B$1:$D$1',
     *         Values: 'Sheet1!$B$3:$D$3',
     *       },
     *       {
     *         Name: 'Sheet1!$A$4',
     *         Categories: 'Sheet1!$B$1:$D$1',
     *         Values: 'Sheet1!$B$4:$D$4',
     *       },
     *     ],
     *     Title: { Paragraph: [{ Text: 'Fruit 3D Clustered Column Chart' }] },
     *   });
     *   if (ret3.error) {
     *     console.log(ret3.error);
     *     return;
     *   }
     *   // Save spreadsheet by the given path.
     *   const { buffer, error } = f.WriteToBuffer();
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   fs.writeFile('Book1.xlsx', buffer, 'binary', (error) => {
     *     if (error) {
     *       console.log(error);
     *     }
     *   });
     * });
     * ```
     *
     * The following shows the type of chart supported by excelize:
     *
     *       ID | Enumeration                 | Chart
     *      ----+-----------------------------+------------------------------
     *       0  | Area                        | 2D area chart
     *       1  | AreaStacked                 | 2D stacked area chart
     *       2  | AreaPercentStacked          | 2D 100% stacked area chart
     *       3  | Area3D                      | 3D area chart
     *       4  | Area3DStacked               | 3D stacked area chart
     *       5  | Area3DPercentStacked        | 3D 100% stacked area chart
     *       6  | Bar                         | 2D clustered bar chart
     *       7  | BarStacked                  | 2D stacked bar chart
     *       8  | BarPercentStacked           | 2D 100% stacked bar chart
     *       9  | Bar3DClustered              | 3D clustered bar chart
     *       10 | Bar3DStacked                | 3D stacked bar chart
     *       11 | Bar3DPercentStacked         | 3D 100% stacked bar chart
     *       12 | Bar3DConeClustered          | 3D cone clustered bar chart
     *       13 | Bar3DConeStacked            | 3D cone stacked bar chart
     *       14 | Bar3DConePercentStacked     | 3D cone percent bar chart
     *       15 | Bar3DPyramidClustered       | 3D pyramid clustered bar chart
     *       16 | Bar3DPyramidStacked         | 3D pyramid stacked bar chart
     *       17 | Bar3DPyramidPercentStacked  | 3D pyramid percent stacked bar chart
     *       18 | Bar3DCylinderClustered      | 3D cylinder clustered bar chart
     *       19 | Bar3DCylinderStacked        | 3D cylinder stacked bar chart
     *       20 | Bar3DCylinderPercentStacked | 3D cylinder percent stacked bar chart
     *       21 | Col                         | 2D clustered column chart
     *       22 | ColStacked                  | 2D stacked column chart
     *       23 | ColPercentStacked           | 2D 100% stacked column chart
     *       24 | Col3DClustered              | 3D clustered column chart
     *       25 | Col3D                       | 3D column chart
     *       26 | Col3DStacked                | 3D stacked column chart
     *       27 | Col3DPercentStacked         | 3D 100% stacked column chart
     *       28 | Col3DCone                   | 3D cone column chart
     *       29 | Col3DConeClustered          | 3D cone clustered column chart
     *       30 | Col3DConeStacked            | 3D cone stacked column chart
     *       31 | Col3DConePercentStacked     | 3D cone percent stacked column chart
     *       32 | Col3DPyramid                | 3D pyramid column chart
     *       33 | Col3DPyramidClustered       | 3D pyramid clustered column chart
     *       34 | Col3DPyramidStacked         | 3D pyramid stacked column chart
     *       35 | Col3DPyramidPercentStacked  | 3D pyramid percent stacked column chart
     *       36 | Col3DCylinder               | 3D cylinder column chart
     *       37 | Col3DCylinderClustered      | 3D cylinder clustered column chart
     *       38 | Col3DCylinderStacked        | 3D cylinder stacked column chart
     *       39 | Col3DCylinderPercentStacked | 3D cylinder percent stacked column chart
     *       40 | Doughnut                    | doughnut chart
     *       41 | Line                        | line chart
     *       42 | Line3D                      | 3D line chart
     *       43 | Pie                         | pie chart
     *       44 | Pie3D                       | 3D pie chart
     *       45 | PieOfPie                    | pie of pie chart
     *       46 | BarOfPie                    | bar of pie chart
     *       47 | Radar                       | radar chart
     *       48 | Scatter                     | scatter chart
     *       49 | Surface3D                   | 3D surface chart
     *       50 | WireframeSurface3D          | 3D wireframe surface chart
     *       51 | Contour                     | contour chart
     *       52 | WireframeContour            | wireframe contour chart
     *       53 | Bubble                      | bubble chart
     *       54 | Bubble3D                    | 3D bubble chart
     *       55 | StockHighLowClose           | High-Low-Close stock chart
     *       56 | StockOpenHighLowClose       | Open-High-Low-Close stock chart
     *
     * In Excel a chart series is a collection of information that defines which
     * data is plotted such as values, axis labels and formatting.
     *
     * The series options that can be set are:
     *
     *      Name
     *      Categories
     *      Values
     *      Fill
     *      Legend
     *      Line
     *      Marker
     *      DataLabel
     *      DataLabelPosition
     *      DataPoint
     *
     * Name: Set the name for the series. The name is displayed in the chart
     * legend and in the formula bar. The 'Name' property is optional and if it
     * isn't supplied it will default to Series 1..n. The name can also be a
     * formula such as Sheet1!$A$1
     *
     * Categories: This sets the chart category labels. The category is more or
     * less the same as the X axis. In most chart types the 'Categories'
     * property is optional and the chart will just assume a sequential series
     * from 1..n.
     *
     * Values: This is the most important property of a series and is the only
     * mandatory option for every chart object. This option links the chart with
     * the worksheet data that it displays.
     *
     * Sizes: This sets the bubble size in a data series. The 'Sizes' property
     * is optional and the default value was same with 'Values'.
     *
     * Fill: This set the format for the data series fill. The 'Fill' property
     * is optional.
     *
     * Legend: This set the font of legend text for a data series. The 'Legend'
     * property is optional.
     *
     * Line: This sets the line format of the line chart. The 'Line' property is
     * optional and if it isn't supplied it will default style. The options that
     * can be set are width and color. The range of width is 0.25pt - 999pt. If
     * the value of width is outside the range, the default width of the line is
     * 2pt.
     *
     * Marker: This sets the marker of the line chart and scatter chart. The
     * range of optional field 'Size' is 2-72 (default value is 5). The
     * enumeration value of optional field 'Symbol' are (default value is
     * 'auto'):
     *
     *      circle
     *      dash
     *      diamond
     *      dot
     *      none
     *      picture
     *      plus
     *      square
     *      star
     *      triangle
     *      x
     *      auto
     *
     * DataLabel: This sets the format of the chart series data label.
     *
     * DataLabelPosition: This sets the position of the chart series data label.
     *
     * DataPoint: This sets the format for individual data points in a doughnut,
     * pie or 3D pie chart series. The 'DataPoint' property is optional.
     *
     * Set properties of the chart legend by 'Legend' field with 'ChartLegend'
     * data type. The options that can be set are:
     *
     *     Position
     *     ShowLegendKey
     *     Font
     *
     * Position: Set the position of the chart legend. The default legend
     * position is bottom. The available positions are:
     *
     *     none
     *     top
     *     bottom
     *     left
     *     right
     *     top_right
     *
     * ShowLegendKey: Set the legend keys shall be shown in data labels. The
     * default value is false.
     *
     * Font: Set the font properties of the chart legend text. The properties
     * that can be set are the same as the font object that is used for cell
     * formatting. The font family, size, color, bold, italic, underline, and
     * strike properties can be set.
     *
     * Set properties of the chart title by 'Title' field with 'ChartTitle' data
     * type. The properties that can be set are:
     *
     *     Fill
     *     Border
     *     Paragraph
     *     Font
     *     Formula
     *     OffsetX
     *     OffsetY
     *     Width
     *     Height
     *     Overlay
     *
     * Fill: Set fill color of the chart title. The 'Fill' property is optional.
     *
     * Border: Set border of the chart title, the properties that can be set are the
     * same as the border object that is used for cell formatting. The 'Border'
     * property is optional.
     *
     * Paragraph: Set the rich text of the chart title text. The 'Paragraph'
     * property is optional, and can not be set at the same time with 'Formula'
     * property.
     *
     * Font: Set the font properties of the chart title formula text. The 'Font'
     * property is optional.
     *
     * Formula: Set the formula of the chart title text. For example: Sheet1!$A$1.
     * The 'Formula' property is optional, and can not be set at the same time with
     * 'Paragraph' property.
     *
     * OffsetX: Set the horizontal offset of the chart title. The 'OffsetX' property
     * is optional. The default value is 0, and the value of 'OffsetX' must be an
     * integer from 0 to 100.
     *
     * OffsetY: Set the vertical offset of the chart title. The 'OffsetY' property
     * is optional. The default value is 0, and the value of 'OffsetY' must be an
     * integer from 0 to 100.
     *
     * Width: Set the width of the chart title. The 'Width' property is optional.
     * The default value is 0, and the value of 'Width' must be an integer from 0 to
     * 100.
     *
     * Height: Set the height of the chart title. The 'Height' property is optional.
     * The default value is 0, and the value of 'Height' must be an integer from 0
     * to 100.
     *
     * Overlay: Set the chart title shall be overlaid on the chart. The 'Overlay'
     * property is optional. The default value is false.
     *
     * Specifies how blank cells are plotted on the chart by 'ShowBlanksAs'. The
     * default value is gap. The options that can be set are:
     *
     *     gap
     *     span
     *     zero
     *
     * gap: Specifies that blank values shall be left as a gap.
     *
     * span: Specifies that blank values shall be spanned with a line.
     *
     * zero: Specifies that blank values shall be treated as zero.
     *
     * Specifies that each data marker in the series has a different color by
     * 'VaryColors'. The default value is true.
     *
     * Set chart offset, scale, aspect ratio setting and print settings by
     * 'Format', same as function 'AddPicture'.
     *
     * Set the properties of the chart plot area by 'PlotArea' field with
     * 'ChartPlotArea' data type. The properties that can be set are:
     *
     *     SecondPlotValues
     *     ShowBubbleSize
     *     ShowCatName
     *     ShowDataTable
     *     ShowDataTableKeys
     *     ShowLeaderLines
     *     ShowPercent
     *     ShowSerName
     *     ShowVal
     *     NumFmt
     *
     * SecondPlotValues: Specifies the values in second plot for the 'PieOfPie'
     * and 'BarOfPie' chart.
     *
     * ShowBubbleSize: Specifies the bubble size shall be shown in a data label.
     * The 'ShowBubbleSize' property is optional. The default value is false.
     *
     * ShowCatName: Specifies that the category name shall be shown in the data
     * label. The 'ShowCatName' property is optional. The default value is true.
     *
     * ShowDataTable: Used for add data table under chart, depending on the
     * chart type, only available for area, bar, column and line series type
     * charts. The 'ShowDataTable' property is optional. The default value is
     * false.
     *
     * ShowDataTableKeys: Used for add legend key in data table, only works on
     * 'ShowDataTable' is enabled. The 'ShowDataTableKeys' property is optional.
     * The default value is false.
     *
     * ShowLeaderLines: Specifies leader lines shall be shown for data labels.
     * The 'ShowLeaderLines' property is optional. The default value is false.
     *
     * ShowPercent: Specifies that the percentage shall be shown in a data
     * label. The 'ShowPercent' property is optional. The default value is
     * false.
     *
     * ShowSerName: Specifies that the series name shall be shown in a data
     * label. The 'ShowSerName' property is optional. The default value is
     * false.
     *
     * ShowVal: Specifies that the value shall be shown in a data label.
     * The 'ShowVal' property is optional. The default value is false.
     *
     * NumFmt: Specifies that if linked to source and set custom number format
     * code for data labels. The 'NumFmt' property is optional. The default
     * format code is 'General'.
     *
     * Set the primary horizontal and vertical axis options by 'XAxis' and
     * 'YAxis' fields with 'ChartAxis' data type. The properties of 'XAxis' that
     * can be set are:
     *
     *     None
     *     DropLines
     *     HighLowLines
     *     MajorGridLines
     *     MinorGridLines
     *     TickLabelSkip
     *     ReverseOrder
     *     Maximum
     *     Minimum
     *     Alignment
     *     Font
     *     NumFmt
     *     Title
     *
     * The properties of 'YAxis' that can be set are:
     *
     *     None
     *     MajorGridLines
     *     MinorGridLines
     *     MajorUnit
     *     Secondary
     *     ReverseOrder
     *     Maximum
     *     Minimum
     *     Alignment
     *     Font
     *     LogBase
     *     NumFmt
     *     Title
     *
     * None: Disable axes.
     *
     * DropLines: Specifies drop lines for the 2D and 3D area and line charts.
     * Drop lines are vertical lines that connect data points in a chart down to
     * the horizontal (category) axis. They are often used in Line or Area
     * charts to make it easier to see the exact category position of each
     * point. The 'DropLines' property is optional. The default value is false.
     *
     * HighLowLines: Specifies high low lines for the 2D line chart. High low
     * lines displayed by default in stock charts. They extend from the highest
     * value to the lowest value in each category. The 'HighLowLines' property
     * is optional. The default value is false.
     *
     * MajorGridLines: Specifies major grid lines.
     *
     * MinorGridLines: Specifies minor grid lines.
     *
     * MajorUnit: Specifies the distance between major ticks. Shall contain a
     * positive floating-point number. The 'MajorUnit' property is optional. The
     * default value is auto.
     *
     * Secondary: Specifies the current series vertical axis as the secondary
     * axis, this only works for the second and later chart in the combo chart.
     * The default value is false.
     *
     * TickLabelSkip: Specifies how many tick labels to skip between label that
     * is drawn. The 'TickLabelSkip' property is optional. The default value is
     * auto.
     *
     * ReverseOrder: Specifies that the categories or values on reverse order
     * (orientation of the chart). The 'ReverseOrder' property is optional. The
     * default value is false.
     *
     * Maximum: Specifies that the fixed maximum, 0 is auto. The 'Maximum'
     * property is optional. The default value is auto.
     *
     * Minimum: Specifies that the fixed minimum, 0 is auto. The 'Minimum'
     * property is optional. The default value is auto.
     *
     * Alignment: Specifies that the alignment of the horizontal and vertical
     * axis. The properties of alignment that can be set are:
     *
     *     TextRotation
     *     Vertical
     *
     * The value of 'TextRotation' that can be set from -90 to 90:
     *
     * The value of 'Vertical' that can be set are:
     *
     *     horz
     *     vert
     *     vert270
     *     wordArtVert
     *     eaVert
     *     mongolianVert
     *     wordArtVertRtl
     *
     * Font: Specifies that the font of the horizontal and vertical axis. The
     * properties of font that can be set are:
     *
     *     Bold
     *     Italic
     *     Underline
     *     Family
     *     Size
     *     Strike
     *     Color
     *     VertAlign
     *
     * LogBase: Specifies logarithmic scale base number of the vertical axis.
     *
     * NumFmt: Specifies that if linked to source and set custom number format
     * code for axis. The 'NumFmt' property is optional. The default format code
     * is 'General'.
     *
     * Title: Specifies that the primary horizontal or vertical axis title by
     * 'Title' field with 'ChartTitle' data type. The 'Title' property is
     * optional.
     *
     * Set chart size by 'Dimension' property with 'ChartDimension' data type.
     * The 'Dimension' property is optional. The default width is 480, and
     * height is 260.
     *
     * Set chart legend for all data series by 'Legend' property with
     * 'ChartLegend' data type. The 'Legend' property is optional.
     *
     * Set the bubble size in all data series for the bubble chart or 3D bubble
     * chart by 'BubbleSizes' property. The 'BubbleSizes' property is optional.
     * The default width is 100, and the value should be great than 0 and less
     * or equal than 300.
     *
     * Set the doughnut hole size in all data series for the doughnut chart by
     * 'HoleSize' property. The 'HoleSize' property is optional. The default
     * width is 75, and the value should be great than 0 and less or equal than
     * 90.
     *
     * Set the gap with of the column and bar series chart by 'GapWidth'
     * property. The 'GapWidth' property is optional. The default width is 150,
     * and the value should be great or equal than 0 and less or equal than 500.
     *
     * Set series overlap of the column and bar series chart by 'Overlap'
     * property. The 'Overlap' property is optional. The default width is 0, and
     * the value should be great or equal than -100 and less or equal than 100.
     *
     * combo: Specifies the create a chart that combines two or more chart types
     * in a single chart. For example, create a clustered column - line chart
     * with data Sheet1!$E$1:$L$15:
     *
     * ```typescript
     * const { init } = require('excelize-wasm');
     * const fs = require('fs');
     *
     * init('./node_modules/excelize-wasm/excelize.wasm.gz').then((excelize) => {
     *   const f = excelize.NewFile();
     *   if (f.error) {
     *     console.log(f.error);
     *     return;
     *   }
     *   [
     *     [null, 'Apple', 'Orange', 'Pear'],
     *     ['Small', 2, 3, 3],
     *     ['Normal', 5, 2, 4],
     *     ['Large', 6, 7, 8],
     *   ].forEach((row, idx) => {
     *     const ret1 = excelize.CoordinatesToCellName(1, idx + 1);
     *     if (ret1.error) {
     *       console.log(ret1.error);
     *       return;
     *     }
     *     const res2 = f.SetSheetRow('Sheet1', ret1.cell, row);
     *     if (res2.error) {
     *       console.log(res2.error);
     *       return;
     *     }
     *   });
     *   const ret3 = f.AddChart('Sheet1', 'E1', {
     *     Type: excelize.Col,
     *     Series: [
     *       {
     *         Name: 'Sheet1!$A$2',
     *         Categories: 'Sheet1!$B$1:$D$1',
     *         Values: 'Sheet1!$B$2:$D$2',
     *       },
     *     ],
     *     Format: {
     *       ScaleX:          1,
     *       ScaleY:          1,
     *       OffsetX:         15,
     *       OffsetY:         10,
     *       PrintObject:     true,
     *       LockAspectRatio: false,
     *       Locked:          false,
     *     },
     *     Title: [{
     *       Text: 'Clustered Column - Line Chart',
     *     }],
     *     Legend: {
     *       Position:      'left',
     *       ShowLegendKey: false,
     *     },
     *     PlotArea: {
     *       ShowCatName:     false,
     *       ShowLeaderLines: false,
     *       ShowPercent:     true,
     *       ShowSerName:     true,
     *       ShowVal:         true,
     *     },
     *   }, {
     *     Type: excelize.Line,
     *     Series: [
     *       {
     *         Name: 'Sheet1!$A$4',
     *         Categories: 'Sheet1!$B$1:$D$1',
     *         Values: 'Sheet1!$B$4:$D$4',
     *         Marker: {
     *           Symbol: 'none',
     *           Size: 10,
     *         },
     *       },
     *     ],
     *     Format: {
     *       ScaleX:          1,
     *       ScaleY:          1,
     *       OffsetX:         15,
     *       OffsetY:         10,
     *       PrintObject:     true,
     *       LockAspectRatio: false,
     *       Locked:          false,
     *     },
     *     Legend: {
     *       Position:      'right',
     *       ShowLegendKey: false,
     *     },
     *     PlotArea: {
     *       ShowCatName:     false,
     *       ShowLeaderLines: false,
     *       ShowPercent:     true,
     *       ShowSerName:     true,
     *       ShowVal:         true,
     *     },
     *   });
     *   if (ret3.error) {
     *     console.log(ret3.error);
     *     return;
     *   }
     *   // Save spreadsheet by the given path.
     *   const { buffer, error } = f.WriteToBuffer();
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   fs.writeFile('Book1.xlsx', buffer, 'binary', (error) => {
     *     if (error) {
     *       console.log(error);
     *     }
     *   });
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param chart The chart options
     * @param combo Specifies the create a chart that combines two or more
     *  chart types in a single chart
     */
    AddChart(sheet: string, cell: string, chart: Chart, combo?: Chart): { error: string | null }

    /**
     * AddChartSheet provides the method to create a chartsheet by given chart
     * format set (such as offset, scale, aspect ratio setting and print
     * settings) and properties set. In Excel a chartsheet is a worksheet that
     * only contains a chart.
     * @param sheet The worksheet name
     * @param chart The chart options
     * @param combo Specifies the create a chart that combines two or more
     *  chart types in a single chart
     */
    AddChartSheet(sheet: string, chart: Chart, combo?: Chart): { error: string | null }

    /**
     * AddComment provides the method to add comments in a sheet by giving the
     * worksheet name, cell reference, and format set (such as author and text).
     * Note that the maximum author name length is 255 and the max text length
     * is 32512. For example, add a rich-text comment with a specified comments
     * box size in Sheet1!A5:
     *
     * ```typescript
     * const { error } = f.AddComment('Sheet1', {
     *   Cell:   'A5',
     *   Author: 'Excelize',
     *   Height: 40,
     *   Width:  180,
     *   Paragraph: [
     *     {
     *       Font: {
     *         Bold: true,
     *       },
     *       Text: 'Excelize: ',
     *     },
     *     {
     *       Text: 'This is a comment.',
     *     },
     *   ],
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param comment The comment options
     */
    AddComment(sheet: string, comment: Comment): { error: string | null }

    /**
     * AddDataValidation provides set data validation on a range of the worksheet
     * by given data validation object and worksheet name.
     * @param sheet The worksheet name
     * @param dv The data validation rules
     */
    AddDataValidation(sheet: string, dv: DataValidation): { error: string | null }

    /**
     * AddDataValidation provides the method to ignored error for a range of
     * cells.
     * @param sheet The worksheet name
     * @param rangeRef The top-left and right-bottom cell range reference
     * @param ignoredErrorsType The enumeration value of ignored errors type
     */
    AddIgnoredErrors(sheet: string, rangeRef: string, ignoredErrorsType: IgnoredErrorsType): { error: string | null }

    /**
     * AddPictureFromBytes provides the method to add picture in a sheet by given
     * picture format set (such as offset, scale, aspect ratio setting and print
     * settings), file base name, extension name and file bytes, supported image
     * types: EMF, EMZ, GIF, ICO, JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
     * Note that this function only supports adding pictures placed over the
     * cells currently, and doesn't support adding pictures placed in cells or
     * creating the Kingsoft WPS Office embedded image cells.
     *
     * The optional parameter "AltText" is used to add alternative text to a
     * graph object.
     *
     * The optional parameter "PrintObject" indicates whether the graph object
     * is printed when the worksheet is printed, the default value of that is
     * 'true'.
     *
     * The optional parameter "Locked" indicates whether lock the graph object.
     * Locking an object has no effect unless the sheet is protected.
     *
     * The optional parameter "LockAspectRatio" indicates whether lock aspect
     * ratio for the graph object, the default value of that is 'false'.
     *
     * The optional parameter "AutoFit" specifies if you make graph object size
     * auto-fits the cell, the default value of that is 'false'.
     *
     * The optional parameter "AutoFitIgnoreAspect" specifies if fill the cell
     * with the image and ignore its aspect ratio, the default value of that is
     * 'false'. This option only works when the "AutoFit" is enabled.
     *
     * The optional parameter "OffsetX" specifies the horizontal offset of the
     * graph object with the cell, the default value of that is 0.
     *
     * The optional parameter "OffsetY" specifies the vertical offset of the
     * graph object with the cell, the default value of that is 0.
     *
     * The optional parameter "ScaleX" specifies the horizontal scale of graph
     * object, the default value of that is 1.0 which presents 100%.
     *
     * The optional parameter "ScaleY" specifies the vertical scale of graph
     * object, the default value of that is 1.0 which presents 100%.
     *
     * The optional parameter "Hyperlink" specifies the hyperlink of the graph
     * object.
     *
     * The optional parameter "HyperlinkType" defines two types of
     * hyperlink "External" for website or "Location" for moving to one of the
     * cells in this workbook. When the "HyperlinkType" is "Location",
     * coordinates need to start with "#".
     *
     * The optional parameter "Positioning" defines 3 types of the position of a
     * graph object in a spreadsheet: "oneCell" (Move but don't size with
     * cells), "twoCell" (Move and size with cells), and "absolute" (Don't move
     * or size with cells). If you don't set this parameter, the default
     * positioning is to move and size with cells.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param pic The picture format options
     */
    AddPictureFromBytes(sheet: string, cell: string, pic: Picture): { error: string | null }

    /**
     * AddFormControl provides the method to add form control object in a
     * worksheet by given worksheet name and form control options. Supported
     * form control type: button, check box, group box, label, option button,
     * scroll bar and spinner. If set macro for the form control, the workbook
     * extension should be XLSM or XLTM. Scroll value must be between 0 and
     * 30000. Please note that if a cell link is set for a checkbox form
     * control, Excelize will not assign a value to the linked cell when the
     * checkbox is checked. To reflect the checkbox state, please use the
     * 'SetCellValue' function to manually set the linked cell's value to true.
     *
     * Example 1, add button form control with macro, rich-text, custom button
     * size, print property on Sheet1!A2, and let the button do not move or
     * size with cells:
     *
     * ```typescript
     * const { error } = f.AddFormControl('Sheet1', {
     *   Cell:   'A2',
     *   Type:   excelize.FormControlButton,
     *   Macro:  'Button1_Click',
     *   Width:  140,
     *   Height: 60,
     *   Text:   'Button 1\r\n',
     *   Paragraph: [
     *     {
     *       Font: {
     *         Bold:      true,
     *         Italic:    true,
     *         Underline: 'single',
     *         Family:    'Times New Roman',
     *         Size:      14,
     *         Color:     '777777',
     *       },
     *       Text: 'C1=A1+B1',
     *     },
     *   ],
     *   Format: {
     *     PrintObject: true,
     *     Positioning: 'absolute',
     *   },
     * });
     * ```
     *
     * Example 2, add option button form control with checked status and text
     * on Sheet1!A1:
     *
     * ```typescript
     * const { error } = f.AddFormControl('Sheet1', {
     *   Cell:    'A1',
     *   Type:    excelize.FormControlOptionButton,
     *   Text:    'Option Button 1',
     *   Checked: true,
     * });
     * ```
     *
     * Example 3, add spin button form control on Sheet1!B1 to increase or
     * decrease the value of Sheet1!A1:
     *
     * ```typescript
     * const { error } = f.AddFormControl('Sheet1', {
     *   Cell:       'B1',
     *   Type:       excelize.FormControlSpinButton,
     *   Width:      15,
     *   Height:     40,
     *   CurrentVal: 7,
     *   MinVal:     5,
     *   MaxVal:     10,
     *   IncChange:  1,
     *   CellLink:   'A1',
     * });
     * ```
     *
     * Example 4, add horizontally scroll bar form control on Sheet1!A2 to
     * change the value of Sheet1!A1 by click the scroll arrows or drag the
     * scroll box:
     *
     * ```typescript
     * const { error } = f.AddFormControl('Sheet1', {
     *   Cell:         'A2',
     *   Type:         excelize.FormControlScrollBar,
     *   Width:        140,
     *   Height:       20,
     *   CurrentVal:   50,
     *   MinVal:       10,
     *   MaxVal:       100,
     *   IncChange:    1,
     *   PageChange:   1,
     *   CellLink:     'A1',
     *   Horizontally: true,
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param opts The form control options
     */
    AddFormControl(sheet: string, opts: FormControl): { error: string | null }

    /**
     * AddHeaderFooterImage provides a mechanism to set the graphics that can be
     * referenced in the header and footer definitions via &G, supported image
     * types: EMF, EMZ, GIF, ICO, JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
     *
     * The extension should be provided with a "." in front, e.g. ".png".
     * The width and height should have units in them, e.g. "100pt".
     *
     * @param sheet The worksheet name
     * @param opts The header footer image options
     */
    AddHeaderFooterImage(sheet: string, opts: HeaderFooterImageOptions): { error: string | null }

    /**
     * AddPivotTable provides the method to add pivot table by given pivot
     * table options. Note that the same fields can not in Columns, Rows and
     * Filter fields at the same time.
     *
     * For example, create a pivot table on the range reference Sheet1!G4:M31
     * with the range reference Sheet1!A1:E31 as the data source, summarize by
     * sum for revenue:
     *
     * ```typescript
     * const { init } = require('excelize-wasm');
     * const fs = require('fs');
     *
     * init('./node_modules/excelize-wasm/excelize.wasm.gz').then((excelize) => {
     *   const f = excelize.NewFile();
     *   if (f.error) {
     *     console.log(f.error);
     *     return;
     *   }
     *   // Create some data in a sheet
     *   const month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
     *   const year = [2017, 2018, 2019];
     *   const types = ['Meat', 'Dairy', 'Beverages', 'Produce'];
     *   const revenue = [3217, 4512, 3891, 4738, 3054, 4265, 3643, 4901, 3378, 4126];
     *   const region = ['East', 'West', 'North', 'South'];
     *   f.SetSheetRow('Sheet1', 'A1', ['Month', 'Year', 'Type', 'Revenue', 'Region']);
     *   for (let row = 2; row < 32; row++) {
     *     f.SetCellValue('Sheet1', 'A' + row.toString(), month[(row - 2) % month.length]);
     *     f.SetCellValue('Sheet1', 'B' + row.toString(), year[(row - 2) % year.length]);
     *     f.SetCellValue('Sheet1', 'C' + row.toString(), types[(row - 2) % types.length]);
     *     f.SetCellValue('Sheet1', 'D' + row.toString(), revenue[(row - 2) % revenue.length]);
     *     f.SetCellValue('Sheet1', 'E' + row.toString(), region[(row - 2) % region.length]);
     *   }
     *   const ret = f.AddPivotTable({
     *     DataRange: 'Sheet1!A1:E31',
     *     PivotTableRange: 'Sheet1!G4:M31',
     *     Rows: [{ Data: 'Month', DefaultSubtotal: true }, { Data: 'Year' }],
     *     Filter: [{ Data: 'Region' }],
     *     Columns: [{ Data: 'Type', DefaultSubtotal: true }],
     *     Data: [{ Data: 'Revenue', Name: 'Summarize', Subtotal: 'Sum' }],
     *     RowGrandTotals: true,
     *     ColGrandTotals: true,
     *     ShowDrill: true,
     *     ShowRowHeaders: true,
     *     ShowColHeaders: true,
     *     ShowLastColumn: true,
     *   });
     *   if (ret.error) {
     *     console.log(ret.error);
     *     return;
     *   }
     *   const { buffer, error } = f.WriteToBuffer();
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   fs.writeFile('Book1.xlsx', buffer, 'binary', (error) => {
     *     if (error) {
     *       console.log(error);
     *     }
     *   });
     * });
     * ```
     *
     * @param opt The pivot table option
     */
    AddPivotTable(opt: PivotTableOptions): { error: string | null }

    /**
     * AddShape provides the method to add shape in a sheet by given worksheet
     * index, shape format set (such as offset, scale, aspect ratio setting
     * and print settings) and properties set.
     * @param sheet The worksheet name
     * @param opts The shape options
     */
    AddShape(sheet: string, opts: Shape): { error: string | null }

    /**
     * AddSlicer function inserts a slicer by giving the worksheet name and
     * slicer settings.
     * @param sheet The worksheet name
     * @param opts The slicer options
     */
    AddSlicer(sheet: string, opts: SlicerOptions): { error: string | null }

    /**
     * AddSparkline provides a function to add sparklines to the worksheet by
     * given formatting options. Sparklines are small charts that fit in a single
     * cell and are used to show trends in data. Sparklines are a feature of Excel
     * 2010 and later only. You can write them to an XLSX file that can be read by
     * Excel 2007, but they won't be displayed. For example, add a grouped
     * sparkline. Changes are applied to all three:
     *
     * ```typescript
     * const { error } = f.AddSparkline('Sheet1', {
     *   Location: ['A1', 'A2', 'A3'],
     *   Range:    ['Sheet2!A1:J1', 'Sheet2!A2:J2', 'Sheet2!A3:J3'],
     *   Markers:  true,
     * });
     * ```
     *
     * The following shows the formatting options of sparkline supported by excelize-wasm:
     *
     *      Parameter   | Description
     *     -------------+--------------------------------------------
     *      Location    | Required, must have the same number with 'Range' parameter
     *      Range       | Required, must have the same number with 'Location' parameter
     *      Type        | Enumeration value: line, column, win_loss
     *      Style       | Value range: 0 - 35
     *      Hight       | Toggle sparkline high points
     *      Low         | Toggle sparkline low points
     *      First       | Toggle sparkline first points
     *      Last        | Toggle sparkline last points
     *      Negative    | Toggle sparkline negative points
     *      Markers     | Toggle sparkline markers
     *      Axis        | Used to specify if show horizontal axis
     *      Reverse     | Used to specify if enable plot data right-to-left
     *      SeriesColor | An RGB Color is specified as RRGGBB
     *
     * @param sheet The worksheet name
     * @param opts The sparkline options
     */
    AddSparkline(sheet: string, opts: SparklineOptions): { error: string | null }

    /**
     * AddTable provides the method to add table in a worksheet by given
     * worksheet name, range reference and format set.
     * @param sheet The worksheet name
     * @param rangeRef The top-left and right-bottom cell range reference
     * @param opts The table options
     */
    AddTable(sheet: string, opts: TableOptions): { error: string | null }

    /**
     * AddVBAProject provides the method to add vbaProject.bin file which
     * contains functions and/or macros. The file extension should be XLSM or
     * XLTM.
     * @param file The contents buffer of the vbaProject.bin file
     */
    AddVBAProject(file: Uint8Array): { error: string | null }

    /**
     * AutoFilter provides the method to add auto filter in a worksheet by
     * given worksheet name, range reference and settings. An auto filter in
     * Excel is a way of filtering a 2D range of data based on some simple
     * criteria.
     * @param sheet The worksheet name
     * @param rangeRef The top-left and right-bottom cell range reference
     * @param opts The auto filter options
     */
    AutoFilter(sheet: string, rangeRef: string, opts: AutoFilterOptions[]): { error: string | null }

    /**
     * CalcCellValue provides a function to get calculated cell value. This
     * feature is currently in working processing. Iterative calculation,
     * implicit intersection, explicit intersection, array formula, table
     * formula and some other formulas are not supported currently.
     *
     * Supported formula functions:
     *
     *     ABS
     *     ACCRINT
     *     ACCRINTM
     *     ACOS
     *     ACOSH
     *     ACOT
     *     ACOTH
     *     ADDRESS
     *     AGGREGATE
     *     AMORDEGRC
     *     AMORLINC
     *     AND
     *     ARABIC
     *     ARRAYTOTEXT
     *     ASIN
     *     ASINH
     *     ATAN
     *     ATAN2
     *     ATANH
     *     AVEDEV
     *     AVERAGE
     *     AVERAGEA
     *     AVERAGEIF
     *     AVERAGEIFS
     *     BAHTTEXT
     *     BASE
     *     BESSELI
     *     BESSELJ
     *     BESSELK
     *     BESSELY
     *     BETA.DIST
     *     BETA.INV
     *     BETADIST
     *     BETAINV
     *     BIN2DEC
     *     BIN2HEX
     *     BIN2OCT
     *     BINOM.DIST
     *     BINOM.DIST.RANGE
     *     BINOM.INV
     *     BINOMDIST
     *     BITAND
     *     BITLSHIFT
     *     BITOR
     *     BITRSHIFT
     *     BITXOR
     *     CEILING
     *     CEILING.MATH
     *     CEILING.PRECISE
     *     CHAR
     *     CHIDIST
     *     CHIINV
     *     CHISQ.DIST
     *     CHISQ.DIST.RT
     *     CHISQ.INV
     *     CHISQ.INV.RT
     *     CHISQ.TEST
     *     CHITEST
     *     CHOOSE
     *     CLEAN
     *     CODE
     *     COLUMN
     *     COLUMNS
     *     COMBIN
     *     COMBINA
     *     COMPLEX
     *     CONCAT
     *     CONCATENATE
     *     CONFIDENCE
     *     CONFIDENCE.NORM
     *     CONFIDENCE.T
     *     CONVERT
     *     CORREL
     *     COS
     *     COSH
     *     COT
     *     COTH
     *     COUNT
     *     COUNTA
     *     COUNTBLANK
     *     COUNTIF
     *     COUNTIFS
     *     COUPDAYBS
     *     COUPDAYS
     *     COUPDAYSNC
     *     COUPNCD
     *     COUPNUM
     *     COUPPCD
     *     COVAR
     *     COVARIANCE.P
     *     COVARIANCE.S
     *     CRITBINOM
     *     CSC
     *     CSCH
     *     CUMIPMT
     *     CUMPRINC
     *     DATE
     *     DATEDIF
     *     DATEVALUE
     *     DAVERAGE
     *     DAY
     *     DAYS
     *     DAYS360
     *     DB
     *     DBCS
     *     DCOUNT
     *     DCOUNTA
     *     DDB
     *     DEC2BIN
     *     DEC2HEX
     *     DEC2OCT
     *     DECIMAL
     *     DEGREES
     *     DELTA
     *     DEVSQ
     *     DGET
     *     DISC
     *     DMAX
     *     DMIN
     *     DOLLAR
     *     DOLLARDE
     *     DOLLARFR
     *     DPRODUCT
     *     DSTDEV
     *     DSTDEVP
     *     DSUM
     *     DURATION
     *     DVAR
     *     DVARP
     *     EDATE
     *     EFFECT
     *     ENCODEURL
     *     EOMONTH
     *     ERF
     *     ERF.PRECISE
     *     ERFC
     *     ERFC.PRECISE
     *     ERROR.TYPE
     *     EUROCONVERT
     *     EVEN
     *     EXACT
     *     EXP
     *     EXPON.DIST
     *     EXPONDIST
     *     F.DIST
     *     F.DIST.RT
     *     F.INV
     *     F.INV.RT
     *     F.TEST
     *     FACT
     *     FACTDOUBLE
     *     FALSE
     *     FDIST
     *     FIND
     *     FINDB
     *     FINV
     *     FISHER
     *     FISHERINV
     *     FIXED
     *     FLOOR
     *     FLOOR.MATH
     *     FLOOR.PRECISE
     *     FORECAST
     *     FORECAST.LINEAR
     *     FORMULATEXT
     *     FREQUENCY
     *     FTEST
     *     FV
     *     FVSCHEDULE
     *     GAMMA
     *     GAMMA.DIST
     *     GAMMA.INV
     *     GAMMADIST
     *     GAMMAINV
     *     GAMMALN
     *     GAMMALN.PRECISE
     *     GAUSS
     *     GCD
     *     GEOMEAN
     *     GESTEP
     *     GROWTH
     *     HARMEAN
     *     HEX2BIN
     *     HEX2DEC
     *     HEX2OCT
     *     HLOOKUP
     *     HOUR
     *     HYPERLINK
     *     HYPGEOM.DIST
     *     HYPGEOMDIST
     *     IF
     *     IFERROR
     *     IFNA
     *     IFS
     *     IMABS
     *     IMAGINARY
     *     IMARGUMENT
     *     IMCONJUGATE
     *     IMCOS
     *     IMCOSH
     *     IMCOT
     *     IMCSC
     *     IMCSCH
     *     IMDIV
     *     IMEXP
     *     IMLN
     *     IMLOG10
     *     IMLOG2
     *     IMPOWER
     *     IMPRODUCT
     *     IMREAL
     *     IMSEC
     *     IMSECH
     *     IMSIN
     *     IMSINH
     *     IMSQRT
     *     IMSUB
     *     IMSUM
     *     IMTAN
     *     INDEX
     *     INDIRECT
     *     INT
     *     INTERCEPT
     *     INTRATE
     *     IPMT
     *     IRR
     *     ISBLANK
     *     ISERR
     *     ISERROR
     *     ISEVEN
     *     ISFORMULA
     *     ISLOGICAL
     *     ISNA
     *     ISNONTEXT
     *     ISNUMBER
     *     ISO.CEILING
     *     ISODD
     *     ISOWEEKNUM
     *     ISPMT
     *     ISREF
     *     ISTEXT
     *     KURT
     *     LARGE
     *     LCM
     *     LEFT
     *     LEFTB
     *     LEN
     *     LENB
     *     LN
     *     LOG
     *     LOG10
     *     LOGINV
     *     LOGNORM.DIST
     *     LOGNORM.INV
     *     LOGNORMDIST
     *     LOOKUP
     *     LOWER
     *     MATCH
     *     MAX
     *     MAXA
     *     MAXIFS
     *     MDETERM
     *     MDURATION
     *     MEDIAN
     *     MID
     *     MIDB
     *     MIN
     *     MINA
     *     MINIFS
     *     MINUTE
     *     MINVERSE
     *     MIRR
     *     MMULT
     *     MOD
     *     MODE
     *     MODE.MULT
     *     MODE.SNGL
     *     MONTH
     *     MROUND
     *     MULTINOMIAL
     *     MUNIT
     *     N
     *     NA
     *     NEGBINOM.DIST
     *     NEGBINOMDIST
     *     NETWORKDAYS
     *     NETWORKDAYS.INTL
     *     NOMINAL
     *     NORM.DIST
     *     NORM.INV
     *     NORM.S.DIST
     *     NORM.S.INV
     *     NORMDIST
     *     NORMINV
     *     NORMSDIST
     *     NORMSINV
     *     NOT
     *     NOW
     *     NPER
     *     NPV
     *     OCT2BIN
     *     OCT2DEC
     *     OCT2HEX
     *     ODD
     *     ODDFPRICE
     *     ODDFYIELD
     *     ODDLPRICE
     *     ODDLYIELD
     *     OR
     *     PDURATION
     *     PEARSON
     *     PERCENTILE
     *     PERCENTILE.EXC
     *     PERCENTILE.INC
     *     PERCENTRANK
     *     PERCENTRANK.EXC
     *     PERCENTRANK.INC
     *     PERMUT
     *     PERMUTATIONA
     *     PHI
     *     PI
     *     PMT
     *     POISSON
     *     POISSON.DIST
     *     POWER
     *     PPMT
     *     PRICE
     *     PRICEDISC
     *     PRICEMAT
     *     PROB
     *     PRODUCT
     *     PROPER
     *     PV
     *     QUARTILE
     *     QUARTILE.EXC
     *     QUARTILE.INC
     *     QUOTIENT
     *     RADIANS
     *     RAND
     *     RANDBETWEEN
     *     RANK
     *     RANK.EQ
     *     RATE
     *     RECEIVED
     *     REPLACE
     *     REPLACEB
     *     REPT
     *     RIGHT
     *     RIGHTB
     *     ROMAN
     *     ROUND
     *     ROUNDDOWN
     *     ROUNDUP
     *     ROW
     *     ROWS
     *     RRI
     *     RSQ
     *     SEARCH
     *     SEARCHB
     *     SEC
     *     SECH
     *     SECOND
     *     SERIESSUM
     *     SHEET
     *     SHEETS
     *     SIGN
     *     SIN
     *     SINH
     *     SKEW
     *     SKEW.P
     *     SLN
     *     SLOPE
     *     SMALL
     *     SORTBY
     *     SQRT
     *     SQRTPI
     *     STANDARDIZE
     *     STDEV
     *     STDEV.P
     *     STDEV.S
     *     STDEVA
     *     STDEVP
     *     STDEVPA
     *     STEYX
     *     SUBSTITUTE
     *     SUBTOTAL
     *     SUM
     *     SUMIF
     *     SUMIFS
     *     SUMPRODUCT
     *     SUMSQ
     *     SUMX2MY2
     *     SUMX2PY2
     *     SUMXMY2
     *     SWITCH
     *     SYD
     *     T
     *     T.DIST
     *     T.DIST.2T
     *     T.DIST.RT
     *     T.INV
     *     T.INV.2T
     *     T.TEST
     *     TAN
     *     TANH
     *     TBILLEQ
     *     TBILLPRICE
     *     TBILLYIELD
     *     TDIST
     *     TEXT
     *     TEXTAFTER
     *     TEXTBEFORE
     *     TEXTJOIN
     *     TIME
     *     TIMEVALUE
     *     TINV
     *     TODAY
     *     TRANSPOSE
     *     TREND
     *     TRIM
     *     TRIMMEAN
     *     TRUE
     *     TRUNC
     *     TTEST
     *     TYPE
     *     UNICHAR
     *     UNICODE
     *     UNIQUE
     *     UPPER
     *     VALUE
     *     VALUETOTEXT
     *     VAR
     *     VAR.P
     *     VAR.S
     *     VARA
     *     VARP
     *     VARPA
     *     VDB
     *     VLOOKUP
     *     WEEKDAY
     *     WEEKNUM
     *     WEIBULL
     *     WEIBULL.DIST
     *     WORKDAY
     *     WORKDAY.INTL
     *     XIRR
     *     XLOOKUP
     *     XNPV
     *     XOR
     *     YEAR
     *     YEARFRAC
     *     YIELD
     *     YIELDDISC
     *     YIELDMAT
     *     Z.TEST
     *     ZTEST
     *
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param opts The options for get calculated cell value
     */
    CalcCellValue(sheet: string, cell: string, opts?: Options): { value: string, error: string | null }

    /**
     * CopySheet provides a function to duplicate a worksheet by gave source
     * and target worksheet index. Note that currently doesn't support
     * duplicate workbooks that contain tables, charts or pictures.
     * @param from Source sheet index
     * @param to Target sheet index
     */
    CopySheet(from: number, to: number): { error: string | null }

    /**
     * DeleteChart provides a function to delete chart in spreadsheet by given
     * worksheet name and cell reference.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    DeleteChart(sheet: string, cell: string): { error: string | null }

    /**
     * DeleteComment provides the method to delete comment in a sheet by given
     * worksheet name.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    DeleteComment(sheet: string, cell: string): { error: string | null }

    /**
     * DeleteDataValidation delete data validation by given worksheet name and
     * reference sequence. All data validations in the worksheet will be
     * deleted if not specify reference sequence parameter.
     * @param sheet The worksheet name
     * @param sqref The cell reference sequence
     */
    DeleteDataValidation(sheet: string, sqref?: string): { error: string | null }

    /**
     * DeleteDefinedName provides a function to delete the defined names of the
     * workbook or worksheet. If not specified scope, the default scope is
     * workbook.
     * @param definedName The name for a cell or cell range on a worksheet
     */
    DeleteDefinedName(definedName: DefinedName): { error: string | null }

    /**
     * DeleteFormControl provides the method to delete form control in a
     * worksheet by given worksheet name and cell reference.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    DeleteFormControl(sheet: string, cell: string): { error: string | null }

    /**
     * DeletePicture provides a function to delete charts in spreadsheet by
     * given worksheet name and cell reference. Note that the image file won't
     * be deleted from the document currently.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    DeletePicture(sheet: string, cell: string): { error: string | null }

    /**
     * DeleteSheet provides a function to delete worksheet in a workbook by
     * given worksheet name. Use this method with caution, which will affect
     * changes in references such as formulas, charts, and so on. If there is
     * any referenced value of the deleted worksheet, it will cause a file
     * error when you open it. This function will be invalid when only one
     * worksheet is left.
     * @param sheet The worksheet name
     */
    DeleteSheet(sheet: string): { error: string | null }

    /**
     * DeleteSlicer provides the method to delete a slicer by a given slicer
     * name.
     * @param name The slicer name
     */
    DeleteSlicer(name: string): { error: string | null }

    /**
     * DeleteTable provides the method to delete table by given table name.
     * @param name The table name
     */
    DeleteTable(name: string): { error: string | null }

    /**
     * DuplicateRow inserts a copy of specified row (by its Excel row number)
     * below. Use this method with caution, which will affect changes in
     * references such as formulas, charts, and so on. If there is any
     * referenced value of the worksheet, it will cause a file error when you
     * open it. The excelize only partially updates these references
     * currently.
     * @param sheet The worksheet name
     * @param row The row number
     */
    DuplicateRow(sheet: string, row: number): { error: string | null }

    /**
     * DuplicateRowTo inserts a copy of specified row by it Excel number to
     * specified row position moving down exists rows after target position.
     * Use this method with caution, which will affect changes in references
     * such as formulas, charts, and so on. If there is any referenced value
     * of the worksheet, it will cause a file error when you open it. The
     * excelize only partially updates these references currently.
     * @param sheet The worksheet name
     * @param row The source row number
     * @param row2 The target row number
     */
    DuplicateRowTo(sheet: string, row: number, row2: number): { error: string | null }

    /**
     * GetActiveSheetIndex provides a function to get active sheet index of the
     * spreadsheet. If not found the active sheet will be return integer 0.
     */
    GetActiveSheetIndex(): { index: number, error: string | null }

    /**
     * GetAppProps provides a function to get document application properties.
     * @return This is the document application properties.
     */
    GetAppProps(): { props?: AppProperties, error: string | null };

    /**
     * GetBaseColor returns the preferred hex color code by giving hex color
     * code, indexed color, and theme color.
     */
    GetBaseColor(hexColor: string, indexedColor: number, themeColor?: number): { color?: string, error: string | null };

    /**
     * GetCalcProps provides a function to gets calculation properties.
     */
    GetCalcProps(): { props: CalcPropsOptions, error: string | null }

    /**
     * GetCellFormula provides a function to get formula from cell by given
     * worksheet name and cell reference in spreadsheet.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    GetCellFormula(sheet: string, cell: string): { formula: string, error: string | null }

    /**
     * GetCellHyperLink gets a cell hyperlink based on the given worksheet name
     * and cell reference. If the cell has a hyperlink, it will return 'true'
     * and the link address, otherwise it will return 'false' and an empty
     * link address.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    GetCellHyperLink(sheet: string, cell: string): { ok: boolean, location: string, error: string | null }

    /**
     * GetCellRichText provides a function to get rich text of cell by given
     * worksheet.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    GetCellRichText(sheet: string, cell: string): { runs: RichTextRun[], error: string | null }

    /**
     * GetCellStyle provides a function to get cell style index by given
     * worksheet name and cell reference.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    GetCellStyle(sheet: string, cell: string): { style: number, error: string | null }

    /**
     * GetCellType provides a function to get the cell's data type by given
     * worksheet name and cell reference in spreadsheet file.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    GetCellType(sheet: string, cell: string): { cellType: CellType, error: string | null }

    /**
     * GetCellValue provides a function to get formatted value from cell by
     * given worksheet name and cell reference in spreadsheet. The return value
     * is converted to the 'string' data type. If the cell format can be
     * applied to the value of a cell, the applied value will be returned,
     * otherwise the original value will be returned. All cells' values will be
     * the same in a merged range.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param opts The options for get cell value
     */
    GetCellValue(sheet: string, cell: string, opts?: Options): { value: string, error: string | null }

    /**
     * GetColOutlineLevel provides a function to get outline level of a single
     * column by given worksheet name and column name.
     * @param sheet The worksheet name
     * @param col The column name
     */
    GetColOutlineLevel(sheet: string, col: string): { level: number, error: string | null }

    /**
     * GetColStyle provides a function to get column style ID by given
     * worksheet name and column name.
     * @param sheet The worksheet name
     * @param col The column name
     */
    GetColStyle(sheet: string, col: string): { style: number, error: string | null }

    /**
     * GetColVisible provides a function to get visible of a single column by
     * given worksheet name and column name.
     * @param sheet The worksheet name
     * @param col The column name
     */
    GetColVisible(sheet: string, col: string): { visible: boolean, error: string | null }

    /**
     * GetColWidth provides a function to get column width by given worksheet
     * name and column name.
     * @param sheet The worksheet name
     * @param col The column name
     */
    GetColWidth(sheet: string, col: string): { width: number, error: string | null }

    /**
     * GetCols gets the value of all cells by columns on the worksheet based on
     * the given worksheet name, returned as a two-dimensional array, where
     * the value of the cell is converted to the `string` type. If the cell
     * format can be applied to the value of the cell, the applied value will
     * be used, otherwise the original value will be used.
     * @param sheet The worksheet name
     * @param opts The options for get column cells
     */
    GetCols(sheet: string, opts?: Options): { result: string[][], error: string | null }

    /**
     * GetComments retrieves all comments in a worksheet by given worksheet
     * name.
     * @param sheet The worksheet name
     */
    GetComments(sheet: string): { comments: Comment[], error: string | null }

    /**
     * GetConditionalStyle returns conditional format style definition by
     * specified style index.
     * @param styleID The style ID
     */
    GetConditionalStyle(styleID: number): { style: Style, error: string | null }

    /**
     * GetCustomProps provides a function to get custom file properties.
     */
    GetCustomProps(): { props: CustomProperty[], error: string | null }

    /**
     * GetDataValidations returns data validations list by given worksheet name.
     * @param sheet The worksheet name
     */
    GetDataValidations(sheet: string): { dataValidation: DataValidation[], error: string | null }

    /**
     * GetDefaultFont provides the default font name currently set in the
     * workbook. The spreadsheet generated by excelize default font is Calibri.
     */
    GetDefaultFont(): { fontName: string, error: string | null }

    /**
     * GetDefinedName provides a function to get the defined names of the
     * workbook or worksheet.
     */
    GetDefinedName(): { definedNames: DefinedName[], error: string | null }

    /**
     * GetDocProps provides a function to get document core properties.
     */
    GetDocProps(): { props: DocProperties, error: string | null }

    /**
     * GetFormControls retrieves all form controls in a worksheet by a given
     * worksheet name. Note that, this function does not support getting the
     * width and height of the form controls currently.
     * @param sheet The worksheet name
     */
    GetFormControls(sheet: string): { formControls: FormControl[], error: string | null }

    /**
     * GetHyperLinkCells returns cell references which contain hyperlinks in a
     * given worksheet name and link type. The optional parameter 'linkType' use
     * for specific link type, the optional values are "External" for website
     * links, "Location" for moving to one of cell in this workbook, "None" for
     * no links. If linkType is empty, it will return all hyperlinks in the
     * worksheet.
     * @param sheet The worksheet name
     * @param linkType The cell hyperlink type
     */
    GetHyperLinkCells(sheet: string, linkType: string): { result: string[], error: string | null }

    /**
     * GetHeaderFooter provides a function to get worksheet header and footer by
     * given worksheet name.
     * @param sheet The worksheet name
     */
    GetHeaderFooter(sheet: string): { opts: HeaderFooterOptions, error: string | null }

    /**
     * GetMergeCells provides a function to get all merged cells from a specific
     * worksheet. If the `withoutValues` parameter is set to `true`, it will not
     * return the cell values of merged cells, only the range reference will be
     * returned. For example get all merged cells on Sheet1:
     *
     * ```typescript
     * const { mergeCells, error } = f.GetMergeCells("Sheet1")
     * ```
     *
     * If you want to get merged cells without cell values, you can use the
     * following code:
     *
     * ```typescript
     * const { mergeCells, error } = f.GetMergeCells("Sheet1", true)
     * ```
     * @param sheet The worksheet name
     */
    GetMergeCells(sheet: string, withoutValues?: boolean): { mergeCells: MergeCell[], error: string | null }

    /**
     * GetPageLayout provides a function to gets worksheet page layout.
     * @param sheet The worksheet name
     */
    GetPageLayout(sheet: string): { opts: PageLayoutOptions, error: string | null }

    /**
     * GetPanes provides a function to get freeze panes, split panes, and
     * worksheet views by given worksheet name.
     * @param sheet The worksheet name
     */
    GetPanes(sheet: string): { panes: Panes, error: string | null }

    /**
     * GetPictures provides a function to get picture meta info and raw content
     * embed in spreadsheet by given worksheet and cell name. This function
     * returns the image contents as []byte data types. This function is
     * concurrency safe. For example:
     *
     * ```typescript
     *  const { init } = require('excelize-wasm');
     *  const fs = require('fs');
     *
     *  init('./node_modules/excelize-wasm/excelize.wasm.gz').then((excelize) => {
     *    const f = excelize.OpenReader(fs.readFileSync('Book1.xlsx'));
     *    if (f.error) {
     *      console.log(f.error);
     *      return
     *    }
     *    const { pictures, error } = f.GetPictures('Sheet1', 'A2')
     *    if (error) {
     *      console.log(error);
     *      return;
     *    }
     *    pictures.forEach((pic, idx) => {
     *      const name = 'image'+idx.toString()+pic.Extension;
     *      fs.writeFile(name, pic.File, 'binary', (error) => {
     *        if (error) {
     *          console.log(error);
     *        }
     *      });
     *    });
     *  });
     * ```
     *
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    GetPictures(sheet: string, cell: string): { pictures: Picture[], error: string | null }

    /**
     * GetPictureCells returns all picture cell references in a worksheet by a
     * specific worksheet name.
     * @param sheet The worksheet name
     */
    GetPictureCells(sheet: string): { cells: string[], error: string | null }

    /**
     * GetPivotTables returns all pivot table definitions in a worksheet by
     * given worksheet name.
     */
    GetPivotTables(sheet: string): { opts: PivotTableOptions[], error: string | null }

    /**
     * GetRowHeight provides a function to get row height by given worksheet
     * name and row number. For example, get the height of the first row in
     * Sheet1:
     *
     * ```typescript
     * const { height, error } = f.GetRowHeight('Sheet1', 1);
     * ```
     *
     * @param sheet The worksheet name
     * @param row The row number
     */
    GetRowHeight(sheet: string, row: number): { height: number, error: string | null }

    /**
     * GetRowOutlineLevel provides a function to get outline level number of a
     * single row by given worksheet name and Excel row number.
     * @param sheet The worksheet name
     * @param row The row number
     */
    GetRowOutlineLevel(sheet: string, row: number): { level: number, error: string | null }

    /**
     * GetRowVisible provides a function to get visible of a single row by
     * given worksheet name and Excel row number. For example, get visible state
     * of row 2 in Sheet1:
     *
     * ```typescript
     * const { visible, error } = f.GetRowVisible('Sheet1', 2);
     * ```
     *
     * @param sheet The worksheet name
     * @param row The row number
     */
    GetRowVisible(sheet: string, row: number): { visible: boolean, error: string | null }

    /**
     * GetSheetDimension provides the method to get the used range of the worksheet.
     * @param sheet The worksheet name
     */
    GetSheetDimension(sheet: string): { dimension: string, error: string | null }

    /**
     * GetRows return all the rows in a sheet by given worksheet name, returned
     * as a two-dimensional array, where the value of the cell is converted to
     * the string type. If the cell format can be applied to the value of the
     * cell, the applied value will be used, otherwise the original value will
     * be used. GetRows fetched the rows with value or formula cells, the
     * continually blank cells in the tail of each row will be skipped, so the
     * length of each row may be inconsistent.
     *
     * For example, get and traverse the value of all cells by rows on a
     * worksheet named 'Sheet1':
     *
     * ```typescript
     * const { result, error } = f.GetRows('Sheet1');
     * if (error) {
     *   console.log(error);
     *   return;
     * }
     * result.forEach((row) => {
     *   row.forEach((colCell) => {
     *     process.stdout.write(`${colCell}\t`);
     *   });
     *   console.log();
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param opts The options for get rows
     */
    GetRows(sheet: string, opts?: Options): { result: string[][], error: string | null }

    /**
     * GetSheetIndex provides a function to get a sheet index of the workbook
     * by the given sheet name. If the given sheet name is invalid or sheet
     * doesn't exist, it will return an integer type value -1.
     * @param sheet The worksheet name
     */
    GetSheetIndex(sheet: string): { index: number, error: string | null }

    /**
     * GetSheetList provides a function to get worksheets, chart sheets, and
     * dialog sheets name list of the workbook.
     */
    GetSheetList(): { list: string[] }

    /**
     * GetSheetMap provides a function to get worksheets, chart sheets, dialog
     * sheets ID and name map of the workbook.
     */
    GetSheetMap(): { sheets: Map<string,string>, error: string | null }

    /**
     * GetSheetName provides a function to get the sheet name of the workbook
     * by the given sheet index. If the given sheet index is invalid, it will
     * return an empty string.
     * @param index The sheet index
     */
    GetSheetName(index: number): { name: string, error: string | null }

    /**
     * GetSheetProps provides a function to get worksheet properties.
     * @param sheet The worksheet name
     */
    GetSheetProps(sheet: string): { props: SheetPropsOptions, error: string | null }

    /**
     * GetSheetProtection provides a function to get worksheet protection
     * settings by given worksheet name. Note that the password in the returned
     * will always be empty.
     * @param sheet The worksheet name
     */
    GetSheetProtection(sheet: string): { opts: SheetProtectionOptions, error: string | null }

    /**
     * GetSheetView gets the value of sheet view options. The viewIndex may be
     * negative and if so is counted backward (-1 is the last view).
     * @param sheet The worksheet name
     * @param viewIndex The sheet view index
     */
    GetSheetView(sheet: string, viewIndex: number): { opts: ViewOptions, error: string | null }

    /**
     * GetSheetVisible provides a function to get worksheet visible by given
     * worksheet name.
     * @param sheet The worksheet name
     */
    GetSheetVisible(sheet: string): { visible: boolean, error: string | null }

    /**
     * GetSlicers provides the method to get all slicers in a worksheet by a
     * given worksheet name. Note that, this function does not support getting
     * the height, width, and graphic options of the slicer shape currently.
     * @param sheet The worksheet name
     */
    GetSlicers(sheet: number): { slicers: SlicerOptions[], error: string | null }

    /**
     * GetStyle provides a function to get style definition by given style index.
     * @param styleID The style ID
     */
    GetStyle(styleID: number): { style: Style, error: string | null }

    /**
     * GetTables provides the method to get all tables in a worksheet by given
     * worksheet name.
     * @param sheet The worksheet name
     */
    GetTables(sheet: string): { tables: TableOptions[], error: string | null }

    /**
     * GetWorkbookProps provides a function to gets workbook properties.
     */
    GetWorkbookProps(): { props: WorkbookPropsOptions, error: string | null }

    /**
     * GroupSheets provides a function to group worksheets by given worksheets
     * name. Group worksheets must contain an active worksheet.
     * @param sheets The worksheet names
     */
    GroupSheets(sheets: string[]): { error: string | null }

    /**
     * InsertCols provides a function to insert new columns before the given
     * column name and number of columns.
     *
     * Use this method with caution, which will affect changes in references
     * such as formulas, charts, and so on. If there is any referenced value
     * of the worksheet, it will cause a file error when you open it. The
     * excelize only partially updates these references currently.
     * @param sheet The worksheet name
     * @param col The base column name
     * @param n The insert columns count
     */
    InsertCols(sheet: string, col: string, n: number): { error: string | null }

    /**
     * InsertPageBreak create a page break to determine where the printed page
     * ends and where begins the next one by given worksheet name and cell, so
     * the content before the page break will be printed on one page and after
     * the page break on another.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    InsertPageBreak(sheet: string, cell: string): { error: string | null }

    /**
     * InsertRows provides a function to insert new rows after the given Excel
     * row number starting from 1 and number of rows.
     *
     * Use this method with caution, which will affect changes in references
     * such as formulas, charts, and so on. If there is any referenced value
     * of the worksheet, it will cause a file error when you open it. The
     * excelize only partially updates these references currently.
     * @param sheet The worksheet name
     * @param row The base row number
     * @param n Insert rows count
     */
    InsertRows(sheet: string, row: number, n: number): { error: string | null }

    /**
     * MergeCell provides a function to merge cells by given range reference
     * and sheet name. Merging cells only keeps the upper-left cell value, and
     * discards the other values. For example create a merged cell of D3:E9 on
     * Sheet1:
     *
     * ```typescript
     * const { error } = f.MergeCell('Sheet1', 'D3', 'E9');
     * ```
     *
     * If you create a merged cell that overlaps with another existing merged
     * cell, those merged cells that already exist will be removed. The cell
     * references tuple after merging in the following range will be: A1
     * (x3,y1) D1(x2,y1) A8(x3,y4) D8(x2,y4)
     *
     *                  B1(x1,y1)      D1(x2,y1)
     *                +------------------------+
     *                |                        |
     *      A4(x3,y3) |    C4(x4,y3)           |
     *     +------------------------+          |
     *     |          |             |          |
     *     |          |B5(x1,y2)    | D5(x2,y2)|
     *     |          +------------------------+
     *     |                        |
     *     |A8(x3,y4)      C8(x4,y4)|
     *     +------------------------+
     * @param sheet The worksheet name
     * @param topLeftCell The top-left cell reference
     * @param bottomRightCell The right-bottom cell reference
     */
    MergeCell(sheet: string, topLeftCell: string, bottomRightCell: string): { error: string | null }

    /**
     * MoveSheet moves a sheet to a specified position in the workbook. The
     * function moves the source sheet before the target sheet. After moving,
     * other sheets will be shifted to the left or right. If the sheet is
     * already at the target position, the function will not perform any action.
     * Not that this function will be ungroup all sheets after moving. For
     * example, move Sheet2 before Sheet1:
     *
     * ```typescript
     * const { error } = f.MoveSheet('Sheet2', 'Sheet1');
     * ```
     *
     * @param source The source sheet name
     * @param target The target sheet name
     */
    MoveSheet(source: string, target: string): { error: string | null }

    /**
     * NewConditionalStyle provides a function to create style for conditional
     * format by given style format. The parameters are the same with the
     * NewStyle function. Note that the color field uses RGB color code and
     * only support to set font, fills, alignment and borders currently.
     * @param style
     */
    NewConditionalStyle(style: Style): { style: number, error: string | null }

    /**
     * NewSheet provides the function to create a new sheet by given a
     * worksheet name and returns the index of the sheets in the workbook
     * after it appended. Note that when creating a new workbook, the default
     * worksheet named `Sheet1` will be created.
     * @param sheet The worksheet name
     */
    NewSheet(sheet: string): { index: number, error: string | null }

    /**
     * ProtectSheet provides a function to prevent other users from
     * accidentally or deliberately changing, moving, or deleting data in a
     * worksheet. The optional field AlgorithmName specified hash algorithm,
     * support XOR, MD4, MD5, SHA-1, SHA2-56, SHA-384, and SHA-512 currently,
     * if no hash algorithm specified, will be using the XOR algorithm as
     * default. For example, protect Sheet1 with protection settings:
     *
     * ```typescript
     * const { error } = f.ProtectSheet('Sheet1', {
     *   AlgorithmName:       'SHA-512',
     *   Password:            'password',
     *   SelectLockedCells:   true,
     *   SelectUnlockedCells: true,
     *   EditScenarios:       true,
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param opts The worksheet protection options
     */
    ProtectSheet(sheet: string, opts: SheetProtectionOptions): { error: string | null }

    /**
     * ProtectWorkbook provides a function to prevent other users from viewing
     * hidden worksheets, adding, moving, deleting, or hiding worksheets, and
     * renaming worksheets in a workbook. The optional field AlgorithmName
     * specified hash algorithm, support XOR, MD4, MD5, SHA-1, SHA2-56,
     * SHA-384, and SHA-512 currently, if no hash algorithm specified, will be
     * using the XOR algorithm as default. The generated workbook only works on
     * Microsoft Office 2007 and later. For example, protect workbook with
     * protection settings:
     *
     * ```typescript
     * const { error } = f.ProtectWorkbook({
     *   Password:      'password',
     *   LockStructure: true,
     * });
     * ```
     *
     * @param opts The workbook protection options
     */
    ProtectWorkbook(opts: WorkbookProtectionOptions): { error: string | null }

    /**
     * NewStyle provides a function to create the style for cells by given
     * options. Note that the color field uses RGB color code.
     * @param style The style options
     */
    NewStyle(style: Style): { style: number, error: string | null }

    /**
     * RemoveCol provides a function to remove single column by given worksheet
     * name and column index.
     *
     * Use this method with caution, which will affect changes in references
     * such as formulas, charts, and so on. If there is any referenced value
     * of the worksheet, it will cause a file error when you open it. The
     * excelize only partially updates these references currently.
     * @param sheet The worksheet name
     * @param col The column name
     */
    RemoveCol(sheet: string, col: string): { error: string | null }

    /**
     * RemovePageBreak remove a page break by given worksheet name and cell
     * reference.
     * @param sheet The worksheet name
     * @param cell The cell reference
     */
    RemovePageBreak(sheet: string, cell: string): { error: string | null }

    /**
     * RemoveRow provides a function to remove single row by given worksheet
     * name and Excel row number.
     *
     * Use this method with caution, which will affect changes in references
     * such as formulas, charts, and so on. If there is any referenced value
     * of the worksheet, it will cause a file error when you open it. The
     * excelize only partially updates these references currently.
     * @param sheet The worksheet name
     * @param row The row number
     */
    RemoveRow(sheet: string, row: number): { error: string | null }

    /**
     * SearchSheet provides a function to get cell reference by given worksheet
     * name, cell value, and regular expression. The function doesn't support
     * searching on the calculated result, formatted numbers and conditional
     * lookup currently. If it is a merged cell, it will return the cell
     * reference of the upper left cell of the merged range reference.
     * @param sheet The worksheet name
     * @param value The cell value to search
     * @param reg Specifies if search with regular expression
     */
    SearchSheet(sheet: string, value: string, reg?: boolean): { result: string[], error: string | null }

    /**
     * SetActiveSheet provides a function to set the default active sheet of
     * the workbook by a given index. Note that the active index is different
     * from the ID returned by function GetSheetMap(). It should be greater
     * than or equal to 0 and less than the total worksheet numbers.
     * @param index The sheet index
     */
    SetActiveSheet(index: number): { error: string | null }

    /**
     * SetAppProps provides a function to set document application properties.
     * The properties that can be set are:
     *
     *      Property          | Description
     *     -------------------+---------------------------------------------------
     *      Application       | The name of the application that created this
     *                        | document.
     *                        |
     *      ScaleCrop         | Indicates the display mode of the document
     *                        | thumbnail. Set this element to 'true' to enable
     *                        | scaling of the document thumbnail to the display.
     *                        | Set this element to 'false' to enable cropping of
     *                        | the document thumbnail to show only sections that
     *                        | will fit the display.
     *                        |
     *      DocSecurity       | Security level of a document as a numeric value.
     *                        | Document security is
     *                        |
     *                        | defined as:
     *                        | 1 - Document is password protected.
     *                        | 2 - Document is recommended to be opened as read-only.
     *                        | 3 - Document is enforced to be opened as read-only.
     *                        | 4 - Document is locked for annotation.
     *                        |
     *      Company           | The name of a company associated with the document.
     *                        |
     *      LinksUpToDate     | Indicates whether hyperlinks in a document are
     *                        | up-to-date. Set this
     *                        | element to 'true' to indicate that hyperlinks are
     *                        | updated. Set this element to 'false' to indicate
     *                        | that hyperlinks are outdated.
     *                        |
     *      HyperlinksChanged | Specifies that one or more hyperlinks in this part
     *                        | were updated exclusively in this part by a
     *                        | producer. The next producer to open this document
     *                        | shall update the hyperlink relationships with the
     *                        | new hyperlinks specified in this part.
     *                        |
     *      AppVersion        | Specifies the version of the application which
     *                        | produced this document. The content of this
     *                        | element shall be of the form XX.YYYY where X and Y
     *                        | represent numerical values, or the document shall
     *                        | be considered non-conformant.
     *
     * For example:
     *
     * ```typescript
     * const { error } = f.SetAppProps({
     *   Application:       'Microsoft Excel',
     *   ScaleCrop:         true,
     *   DocSecurity:       3,
     *   Company:           'Company Name',
     *   LinksUpToDate:     true,
     *   HyperlinksChanged: true,
     *   AppVersion:        '16.0000',
     * });
     * ```
     *
     * @param props The application properties
     */
    SetAppProps(props: AppProperties): { error: string | null }

    /**
     * SetCalcProps provides a function to sets calculation properties. Optional
     * value of "CalcMode" property is: "manual", "auto" or "autoNoTable".
     * Optional value of "RefMode" property is: "A1" or "R1C1".
     * @param props The application properties
     */
    SetCalcProps(opts: CalcPropsOptions): { error: string | null }

    /**
     * SetCellBool provides a function to set bool type value of a cell by
     * given worksheet name, cell reference and cell value.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     */
    SetCellBool(sheet: string, cell: string, value: boolean): { error: string | null }

    /**
     * SetCellDefault provides a function to set string type value of a cell as
     * default format without escaping the cell.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     */
    SetCellDefault(sheet: string, cell: string, value: string): { error: string | null }

    /**
     * SetCellFloat sets a floating point value into a cell. The precision
     * parameter specifies how many places after the decimal will be shown
     * while -1 is a special value that will use as many decimal places as
     * necessary to represent the number. bitSize is 32 or 64 depending on if
     * a float32 or float64 was originally used for the value.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     * @param precision Specifies how many places after the decimal will be
     *  shown
     * @param bitSize BitSize is 32 or 64 depending on if a float32 or float64
     *  was originally used for the value
     */
    SetCellFloat(sheet: string, cell: string, value: number, precision: number, bitSize: number): { error: string | null }

    /**
     * SetCellFormula provides a function to set formula on the cell is taken
     * according to the given worksheet name and cell formula settings. The
     * result of the formula cell can be calculated when the worksheet is
     * opened by the Office Excel application or can be using the
     * "CalcCellValue" function also can get the calculated cell value. If the
     * Excel application doesn't calculate the formula automatically when the
     * workbook has been opened, please call "UpdateLinkedValue" after setting
     * the cell formula functions.
     *
     * Example 1, set normal formula "=SUM(A1,B1)" for the cell "A3" on "Sheet1":
     *
     * ```typescript
     * const { error } = f.SetCellFormula('Sheet1', 'A3', '=SUM(A1,B1)');
     * ```
     *
     * Example 2, set one-dimensional vertical constant array (column array)
     * formula "1,2,3" for the cell "A3" on "Sheet1":
     *
     * ```typescript
     * const { error } = f.SetCellFormula('Sheet1', 'A3', '={1;2;3}');
     * ```
     *
     * Example 3, set one-dimensional horizontal constant array (row array)
     * formula '"a","b","c"' for the cell "A3" on "Sheet1":
     *
     * ```typescript
     * const { error } = f.SetCellFormula('Sheet1', 'A3', '={"a","b","c"}');
     * ```
     *
     * Example 4, set two-dimensional constant array formula '{1,2,"a","b"}' for
     * the cell "A3" on "Sheet1":
     *
     * ```typescript
     * const { error } = f.SetCellFormula('Sheet1', 'A3', '={1,2;"a","b"}',
     *     {Ref: 'A3:A3', Type: 'array'});
     * ```
     *
     * Example 5, set range array formula "A1:A2" for the cell "A3" on "Sheet1":
     *
     * ```typescript
     * const { error } = f.SetCellFormula('Sheet1', 'A3', '=A1:A2',
     *     {Ref: 'A3:A3', Type: 'array'});
     * ```
     *
     * Example 6, set shared formula "=A1+B1" for the cell "C1:C5"
     * on "Sheet1", "C1" is the master cell:
     *
     * ```typescript
     * const { error } = f.SetCellFormula('Sheet1', 'C1', '=A1+B1',
     *     {Ref: 'C1:C5', Type: 'shared'});
     * ```
     *
     * Example 7, set table formula "=SUM(Table1[[A]:[B]])" for the cell "C2"
     * on "Sheet1":
     *
     * ```typescript
     * const { init } = require('excelize-wasm');
     * const fs = require('fs');
     *
     * init('./node_modules/excelize-wasm/excelize.wasm.gz').then((excelize) => {
     *   const f = excelize.NewFile();
     *   [
     *     ['A', 'B', 'C'],
     *     [1, 2],
     *   ].forEach((row, idx) => {
     *     var { error } = f.SetSheetRow('Sheet1', `A${idx + 1}`, row);
     *     if (error) {
     *       console.log(error);
     *       return;
     *     }
     *   });
     *   var { error } = f.AddTable('Sheet1', 'A1:C2', {
     *     Name: 'Table1',
     *     StyleName: 'TableStyleMedium2',
     *   });
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   var { error } = f.SetCellFormula('Sheet1', 'C2', '=SUM(Table1[[A]:[B]])', {
     *     Type: 'dataTable',
     *   });
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   // Save spreadsheet by the given path.
     *   var { buffer, error } = f.WriteToBuffer();
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   fs.writeFile('Book1.xlsx', buffer, 'binary', (error) => {
     *     if (error) {
     *       console.log(error);
     *     }
     *   });
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param formula The cell formula
     * @param opts The formula options
     */
    SetCellFormula(sheet: string, cell: string, formula: string, opts?: FormulaOptions): { error: string | null }

    /**
     * SetCellHyperLink provides a function to set cell hyperlink by given
     * worksheet name and link URL address. LinkType defines three types of
     * hyperlink "External" for website or "Location" for moving to one of cell
     * in this workbook or "None" for remove hyperlink. Maximum limit hyperlinks
     * in a worksheet is 65530. This function is only used to set the hyperlink
     * of the cell and doesn't affect the value of the cell. If you need to set
     * the value of the cell, please use the other functions such as
     * `SetCellStyle` or `SetSheetRow`.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param link The hyperlink
     * @param linkType The hyperlink type
     * @param opts The hyperlink options
     */
    SetCellHyperLink(sheet: string, cell: string, link: string, linkType: string, opts?: HyperlinkOpts): { error: string | null }

    /**
     * SetCellInt provides a function to set int type value of a cell by given
     * worksheet name, cell reference and cell value.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     */
    SetCellInt(sheet: string, cell: string, value: number): { error: string | null }

    /**
     * SetCellUint provides a function to set uint type value of a cell by given
     * worksheet name, cell reference and cell value.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     */
    SetCellUint(sheet: string, cell: string, value: number): { error: string | null }

    /**
     * SetCellRichText provides a function to set cell with rich text by given
     * worksheet name, cell reference and rich text runs. For example, set rich
     * text on the A1 cell of the worksheet named Sheet1:
     *
     * ```typescript
     * const { init } = require('excelize-wasm');
     * const fs = require('fs');
     *
     * init('./node_modules/excelize-wasm/excelize.wasm.gz').then((excelize) => {
     *   const f = excelize.NewFile();
     *   var { error } = f.SetRowHeight('Sheet1', 1, 35);
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   var { error } = f.SetColWidth('Sheet1', 'A', 'A', 44);
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   var { error } = f.SetCellRichText('Sheet1', 'A1', [
     *     {
     *       Text: 'bold',
     *       Font: {
     *         Bold: true,
     *         Color: '2354e8',
     *         Family: 'Times New Roman',
     *       },
     *     },
     *     {
     *       Text: ' and ',
     *       Font: {
     *         Family: 'Times New Roman',
     *       },
     *     },
     *     {
     *       Text: 'italic ',
     *       Font: {
     *         Bold: true,
     *         Color: 'e83723',
     *         Italic: true,
     *         Family: 'Times New Roman',
     *       },
     *     },
     *     {
     *       Text: 'text with color and font-family,',
     *       Font: {
     *         Bold: true,
     *         Color: '2354e8',
     *         Family: 'Times New Roman',
     *       },
     *     },
     *     {
     *       Text: '\r\nlarge text with ',
     *       Font: {
     *         Size: 14,
     *         Color: 'ad23e8',
     *       },
     *     },
     *     {
     *       Text: 'strike',
     *       Font: {
     *         Color: 'e89923',
     *         Strike: true,
     *       },
     *     },
     *     {
     *       Text: ' superscript',
     *       Font: {
     *         Color: 'dbc21f',
     *         VertAlign: 'superscript',
     *       },
     *     },
     *     {
     *       Text: ' and ',
     *       Font: {
     *         Size: 14,
     *         Color: 'ad23e8',
     *         VertAlign: 'baseline',
     *       },
     *     },
     *     {
     *       Text: 'underline',
     *       Font: {
     *         Color: '23e833',
     *         Underline: 'single',
     *       },
     *     },
     *     {
     *       Text: ' subscript.',
     *       Font: {
     *         Color: '017505',
     *         VertAlign: 'subscript',
     *       },
     *     },
     *   ]);
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   var { style, error } = f.NewStyle({
     *     Alignment: { WrapText: true },
     *   });
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   var { error } = f.SetCellStyle('Sheet1', 'A1', 'A1', style);
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   // Save spreadsheet by the given path.
     *   var { buffer, error } = f.WriteToBuffer();
     *   if (error) {
     *     console.log(error);
     *     return;
     *   }
     *   fs.writeFile('Book1.xlsx', buffer, 'binary', (error) => {
     *     if (error) {
     *       console.log(error);
     *     }
     *   });
     * });
     * ```
     *
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param runs The rich text runs
     */
    SetCellRichText(sheet: string, cell: string, runs: RichTextRun[]): { error: string | null }

    /**
     * SetCellStr provides a function to set string type value of a cell. Total
     * number of characters that a cell can contain 32767 characters.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     */
    SetCellStr(sheet: string, cell: string, value: string): { error: string | null }

    /**
     * SetCellStyle provides a function to add style attribute for cells by
     * given worksheet name, range reference and style ID. Note that
     * diagonalDown and diagonalUp type border should be use same color in the
     * same range. SetCellStyle will overwrite the existing styles for the
     * cell, it won't append or merge style with existing styles.
     * @param sheet The worksheet name
     * @param topLeftCell The top-left cell reference
     * @param bottomRightCell The right-bottom cell reference
     * @param styleID The style ID
     */
    SetCellStyle(sheet: string, topLeftCell: string, bottomRightCell: string, styleID: number): { error: string | null }

    /**
     * SetCellValue provides a function to set the value of a cell. The
     * specified coordinates should not be in the first row of the table, a
     * complex number can be set with string text.
     *
     * Note that default date format is m/d/yy h:mm of time.Time type value. You
     * can set numbers format by the SetCellStyle function. If you need to set
     * the specialized date in Excel like January 0, 1900 or February 29, 1900,
     * these times can not representation in Go language time.Time data type.
     * Please set the cell value as number 0 or 60, then create and bind the
     * date-time number format style for the cell.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param value The cell value to be write
     */
    SetCellValue(sheet: string, cell: string, value: boolean | number | string ): { error: string | null }

    /**
     * SetColOutlineLevel provides a function to set outline level of a single
     * column by given worksheet name and column name. The value of parameter
     * `level` is 1-7.
     * @param sheet The worksheet name
     * @param col The column name
     * @param level The outline level of the column
     */
    SetColOutlineLevel(sheet: string, col: string, level: number): { error: string | null }

    /**
     * SetColStyle provides a function to set style of columns by given
     * worksheet name, columns range and style ID. Note that this will
     * overwrite the existing styles for the columns, it won't append or merge
     * style with existing styles.
     * @param sheet The worksheet name
     * @param columns The column range
     * @param styleID The style ID
     */
    SetColStyle(sheet: string, columns: string, styleID: number): { error: string | null }

    /**
     * SetColVisible provides a function to set visible columns by given
     * worksheet name, columns range and visibility.
     * @param sheet The worksheet name
     * @param columns The column name
     * @param visible The column's visibility
     */
    SetColVisible(sheet: string, columns: string, visible: boolean): { error: string | null }

    /**
     * SetColWidth provides a function to set the width of a single column or
     * multiple columns.
     * @param sheet The worksheet name
     * @param startCol The start column name
     * @param endCol The end column name
     * @param width The width of the column
     */
    SetColWidth(sheet: string, startCol: string, endCol: string, width: number): { error: string | null }

    /**
     * SetConditionalFormat provides a function to create conditional
     * formatting rule for cell value. Conditional formatting is a feature of
     * Excel which allows you to apply a format to a cell or a range of cells
     * based on certain criteria.
     * @param sheet The worksheet name
     * @param reference The conditional format range reference
     * @param opts The conditional options
     */
    SetConditionalFormat(sheet: string, reference: string, opts: ConditionalFormatOptions[]): { error: string | null }

    /**
     * SetCustomProps provides a function to set custom file properties by given
     * property name and value. If the property name already exists, it will be
     * updated, otherwise a new property will be added. The value can be of type
     * number, boolean, string, null. The property will be delete if the value
     * is null. The function returns an error if the property value is not of
     * the correct type.
     * @param prop Custom property of the workbook
     */
    SetCustomProps(prop: CustomProperty): { error: string | null }

    /**
     * SetDefaultFont changes the default font in the workbook.
     * @param fontName The font name
     */
    SetDefaultFont(fontName: string): { error: string | null }

    /**
     * SetDefinedName provides a function to set the defined names of the
     * workbook or worksheet. If not specified scope, the default scope is
     * workbook.
     * @param definedName The name for a cell or cell range on a worksheet
     */
    SetDefinedName(definedName: DefinedName): { error: string | null }

    /**
     * SetDocProps provides a function to set document core properties. The
     * properties that can be set are:
     *
     *      Property       | Description
     *     ----------------+-----------------------------------------------------------
     *      Title          | The name given to the resource.
     *                     |
     *      Subject        | The topic of the content of the resource.
     *                     |
     *      Creator        | An entity primarily responsible for making the content of
     *                     | the resource.
     *                     |
     *      Keywords       | A delimited set of keywords to support searching and
     *                     | indexing. This is typically a list of terms that are not
     *                     | available elsewhere in the properties.
     *                     |
     *      Description    | An explanation of the content of the resource.
     *                     |
     *      LastModifiedBy | The user who performed the last modification. The
     *                     | identification is environment-specific.
     *                     |
     *      Language       | The language of the intellectual content of the resource.
     *                     |
     *      Identifier     | An unambiguous reference to the resource within a given
     *                     | context.
     *                     |
     *      Revision       | The topic of the content of the resource.
     *                     |
     *      ContentStatus  | The status of the content. For example: Values might
     *                     | include "Draft", "Reviewed" and "Final"
     *                     |
     *      Category       | A categorization of the content of this package.
     *                     |
     *      Version        | The version number. This value is set by the user or by
     *                     | the application.
     *                     |
     *      Created        | The created time of the content of the resource which
     *                     | represent in ISO 8601 UTC format, for example
     *                     | "2019-06-04T22:00:10Z".
     *                     |
     *      Modified       | The modified time of the content of the resource which
     *                     | represent in ISO 8601 UTC format, for example
     *                     | "2019-06-04T22:00:10Z".
     *                     |
     *
     * For example:
     *
     * ```typescript
     * const { error } = f.SetDocProps({
     *   Category:       'category',
     *   ContentStatus:  'Draft',
     *   Created:        '2019-06-04T22:00:10Z',
     *   Creator:        'Go Excelize',
     *   Description:    'This file created by Go Excelize',
     *   Identifier:     'xlsx',
     *   Keywords:       'Spreadsheet',
     *   LastModifiedBy: 'Go Author',
     *   Modified:       '2019-06-04T22:00:10Z',
     *   Revision:       '0',
     *   Subject:        'Test Subject',
     *   Title:          'Test Title',
     *   Language:       'en-US',
     *   Version:        '1.0.0',
     * });
     * ```
     *
     * @param docProperties The document core properties
     */
    SetDocProps(docProperties: DocProperties): { error: string | null }

    /**
     * SetHeaderFooter provides a function to set headers and footers by given
     * worksheet name and the control characters.
     *
     * Headers and footers are specified using the following settings fields:
     *
     *      Fields           | Description
     *     ------------------+-----------------------------------------------------------
     *      AlignWithMargins | Align header footer margins with page margins
     *      DifferentFirst   | Different first-page header and footer indicator
     *      DifferentOddEven | Different odd and even page headers and footers indicator
     *      ScaleWithDoc     | Scale header and footer with document scaling
     *      OddFooter        | Odd Page Footer, or primary Page Footer if
     *                       | 'DifferentOddEven' is 'false'
     *      OddHeader        | Odd Header, or primary Page Header if 'DifferentOddEven'
     *                       | is 'false'
     *      EvenFooter       | Even Page Footer
     *      EvenHeader       | Even Page Header
     *      FirstFooter      | First Page Footer
     *      FirstHeader      | First Page Header
     *
     * The following formatting codes can be used in 6 string type fields:
     * OddHeader, OddFooter, EvenHeader, EvenFooter, FirstFooter, FirstHeader
     *
     *      Formatting Code        | Description
     *     ------------------------+----------------------------------------------------
     *      &&                     | The character "&"
     *                             |
     *      &font-size             | Size of the text font, where font-size is a decimal
     *                             | font size in points
     *                             |
     *      &"font name,font type" | A text font-name string, font name, and a text
     *                             | font-type string, font type
     *                             |
     *      &"-,Regular"           | Regular text format. Toggles bold and italic modes
     *                             | to off
     *                             |
     *      &A                     | Current worksheet's tab name
     *                             |
     *      &B or &"-,Bold"        | Bold text format, from off to on, or vice versa. The
     *                             | default mode is off
     *                             |
     *      &D                     | Current date
     *                             |
     *      &C                     | Center section
     *                             |
     *      &E                     | Double-underline text format
     *                             |
     *      &F                     | Current workbook's file name
     *                             |
     *      &G                     | Drawing object as background (Use AddHeaderFooterImage)
     *                             |
     *      &H                     | Shadow text format
     *                             |
     *      &I or &"-,Italic"      | Italic text format
     *                             |
     *      &K                     | Text font color
     *                             |
     *                             | An RGB Color is specified as RRGGBB
     *                             |
     *                             | A Theme Color is specified as TTSNNN where TT is the
     *                             | theme color Id, S is either "+" or "-" of the
     *                             | tint/shade value, and NNN is the tint/shade value
     *                             |
     *      &L                     | Left section
     *                             |
     *      &N                     | Total number of pages
     *                             |
     *      &O                     | Outline text format
     *                             |
     *      &P[[+|-]n]             | Without the optional suffix, the current page
     *                             | number in decimal
     *                             |
     *      &R                     | Right section
     *                             |
     *      &S                     | Strike through text format
     *                             |
     *      &T                     | Current time
     *                             |
     *      &U                     | Single-underline text format. If double-underline
     *                             | mode is on, the next occurrence in a section
     *                             | specifier toggles double-underline mode to off;
     *                             | otherwise, it toggles single-underline mode, from
     *                             | off to on, or vice versa. The default mode is off
     *                             |
     *      &X                     | Superscript text format
     *                             |
     *      &Y                     | Subscript text format
     *                             |
     *      &Z                     | Current workbook's file path
     *
     * For example:
     *
     * ```typescript
     * const { error } = f.SetHeaderFooter('Sheet1', {
     *   DifferentFirst:   true,
     *   DifferentOddEven: true,
     *   OddHeader:        '&R&P',
     *   OddFooter:        '&C&F',
     *   EvenHeader:       '&L&P',
     *   EvenFooter:       '&L&D&R&T',
     *   FirstHeader:      `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`,
     * });
     * ```
     *
     * This example shows:
     *
     * - The first page has its own header and footer
     *
     * - Odd and even-numbered pages have different headers and footers
     *
     * - Current page number in the right section of odd-page headers
     *
     * - Current workbook's file name in the center section of odd-page footers
     *
     * - Current page number in the left section of even-page headers
     *
     * - Current date in the left section and the current time in the right section
     * of even-page footers
     *
     * - The text "Center Bold Header" on the first line of the center section of
     * the first page, and the date on the second line of the center section of
     * that same page
     *
     * - No footer on the first page
     * @param sheet The worksheet name
     * @param opts The header footer options
     */
    SetHeaderFooter(sheet: string, opts: HeaderFooterOptions): { error: string | null }

    /**
     * SetPageLayout provides a function to sets worksheet page layout. The
     * following shows the paper size sorted by excelize index number:
     *
     *      Index | Paper Size
     *     -------+-----------------------------------------------
     *        1   | Letter paper (8.5 in. by 11 in.)
     *        2   | Letter small paper (8.5 in. by 11 in.)
     *        3   | Tabloid paper (11 in. by 17 in.)
     *        4   | Ledger paper (17 in. by 11 in.)
     *        5   | Legal paper (8.5 in. by 14 in.)
     *        6   | Statement paper (5.5 in. by 8.5 in.)
     *        7   | Executive paper (7.25 in. by 10.5 in.)
     *        8   | A3 paper (297 mm by 420 mm)
     *        9   | A4 paper (210 mm by 297 mm)
     *        10  | A4 small paper (210 mm by 297 mm)
     *        11  | A5 paper (148 mm by 210 mm)
     *        12  | B4 paper (250 mm by 353 mm)
     *        13  | B5 paper (176 mm by 250 mm)
     *        14  | Folio paper (8.5 in. by 13 in.)
     *        15  | Quarto paper (215 mm by 275 mm)
     *        16  | Standard paper (10 in. by 14 in.)
     *        17  | Standard paper (11 in. by 17 in.)
     *        18  | Note paper (8.5 in. by 11 in.)
     *        19  | #9 envelope (3.875 in. by 8.875 in.)
     *        20  | #10 envelope (4.125 in. by 9.5 in.)
     *        21  | #11 envelope (4.5 in. by 10.375 in.)
     *        22  | #12 envelope (4.75 in. by 11 in.)
     *        23  | #14 envelope (5 in. by 11.5 in.)
     *        24  | C paper (17 in. by 22 in.)
     *        25  | D paper (22 in. by 34 in.)
     *        26  | E paper (34 in. by 44 in.)
     *        27  | DL envelope (110 mm by 220 mm)
     *        28  | C5 envelope (162 mm by 229 mm)
     *        29  | C3 envelope (324 mm by 458 mm)
     *        30  | C4 envelope (229 mm by 324 mm)
     *        31  | C6 envelope (114 mm by 162 mm)
     *        32  | C65 envelope (114 mm by 229 mm)
     *        33  | B4 envelope (250 mm by 353 mm)
     *        34  | B5 envelope (176 mm by 250 mm)
     *        35  | B6 envelope (176 mm by 125 mm)
     *        36  | Italy envelope (110 mm by 230 mm)
     *        37  | Monarch envelope (3.875 in. by 7.5 in.).
     *        38  | 6 3/4 envelope (3.625 in. by 6.5 in.)
     *        39  | US standard fanfold (14.875 in. by 11 in.)
     *        40  | German standard fanfold (8.5 in. by 12 in.)
     *        41  | German legal fanfold (8.5 in. by 13 in.)
     *        42  | ISO B4 (250 mm by 353 mm)
     *        43  | Japanese postcard (100 mm by 148 mm)
     *        44  | Standard paper (9 in. by 11 in.)
     *        45  | Standard paper (10 in. by 11 in.)
     *        46  | Standard paper (15 in. by 11 in.)
     *        47  | Invite envelope (220 mm by 220 mm)
     *        50  | Letter extra paper (9.275 in. by 12 in.)
     *        51  | Legal extra paper (9.275 in. by 15 in.)
     *        52  | Tabloid extra paper (11.69 in. by 18 in.)
     *        53  | A4 extra paper (236 mm by 322 mm)
     *        54  | Letter transverse paper (8.275 in. by 11 in.)
     *        55  | A4 transverse paper (210 mm by 297 mm)
     *        56  | Letter extra transverse paper (9.275 in. by 12 in.)
     *        57  | SuperA/SuperA/A4 paper (227 mm by 356 mm)
     *        58  | SuperB/SuperB/A3 paper (305 mm by 487 mm)
     *        59  | Letter plus paper (8.5 in. by 12.69 in.)
     *        60  | A4 plus paper (210 mm by 330 mm)
     *        61  | A5 transverse paper (148 mm by 210 mm)
     *        62  | JIS B5 transverse paper (182 mm by 257 mm)
     *        63  | A3 extra paper (322 mm by 445 mm)
     *        64  | A5 extra paper (174 mm by 235 mm)
     *        65  | ISO B5 extra paper (201 mm by 276 mm)
     *        66  | A2 paper (420 mm by 594 mm)
     *        67  | A3 transverse paper (297 mm by 420 mm)
     *        68  | A3 extra transverse paper (322 mm by 445 mm)
     *        69  | Japanese Double Postcard (200 mm x 148 mm)
     *        70  | A6 (105 mm x 148 mm)
     *        71  | Japanese Envelope Kaku #2
     *        72  | Japanese Envelope Kaku #3
     *        73  | Japanese Envelope Chou #3
     *        74  | Japanese Envelope Chou #4
     *        75  | Letter Rotated (11in x 8 1/2 11 in)
     *        76  | A3 Rotated (420 mm x 297 mm)
     *        77  | A4 Rotated (297 mm x 210 mm)
     *        78  | A5 Rotated (210 mm x 148 mm)
     *        79  | B4 (JIS) Rotated (364 mm x 257 mm)
     *        80  | B5 (JIS) Rotated (257 mm x 182 mm)
     *        81  | Japanese Postcard Rotated (148 mm x 100 mm)
     *        82  | Double Japanese Postcard Rotated (148 mm x 200 mm)
     *        83  | A6 Rotated (148 mm x 105 mm)
     *        84  | Japanese Envelope Kaku #2 Rotated
     *        85  | Japanese Envelope Kaku #3 Rotated
     *        86  | Japanese Envelope Chou #3 Rotated
     *        87  | Japanese Envelope Chou #4 Rotated
     *        88  | B6 (JIS) (128 mm x 182 mm)
     *        89  | B6 (JIS) Rotated (182 mm x 128 mm)
     *        90  | (12 in x 11 in)
     *        91  | Japanese Envelope You #4
     *        92  | Japanese Envelope You #4 Rotated
     *        93  | PRC 16K (146 mm x 215 mm)
     *        94  | PRC 32K (97 mm x 151 mm)
     *        95  | PRC 32K(Big) (97 mm x 151 mm)
     *        96  | PRC Envelope #1 (102 mm x 165 mm)
     *        97  | PRC Envelope #2 (102 mm x 176 mm)
     *        98  | PRC Envelope #3 (125 mm x 176 mm)
     *        99  | PRC Envelope #4 (110 mm x 208 mm)
     *        100 | PRC Envelope #5 (110 mm x 220 mm)
     *        101 | PRC Envelope #6 (120 mm x 230 mm)
     *        102 | PRC Envelope #7 (160 mm x 230 mm)
     *        103 | PRC Envelope #8 (120 mm x 309 mm)
     *        104 | PRC Envelope #9 (229 mm x 324 mm)
     *        105 | PRC Envelope #10 (324 mm x 458 mm)
     *        106 | PRC 16K Rotated
     *        107 | PRC 32K Rotated
     *        108 | PRC 32K(Big) Rotated
     *        109 | PRC Envelope #1 Rotated (165 mm x 102 mm)
     *        110 | PRC Envelope #2 Rotated (176 mm x 102 mm)
     *        111 | PRC Envelope #3 Rotated (176 mm x 125 mm)
     *        112 | PRC Envelope #4 Rotated (208 mm x 110 mm)
     *        113 | PRC Envelope #5 Rotated (220 mm x 110 mm)
     *        114 | PRC Envelope #6 Rotated (230 mm x 120 mm)
     *        115 | PRC Envelope #7 Rotated (230 mm x 160 mm)
     *        116 | PRC Envelope #8 Rotated (309 mm x 120 mm)
     *        117 | PRC Envelope #9 Rotated (324 mm x 229 mm)
     *        118 | PRC Envelope #10 Rotated (458 mm x 324 mm)
     *
     * @param sheet The worksheet name
     * @param opts The page layout options
     */
    SetPageLayout(sheet: string, opts: PageLayoutOptions): { error: string | null }

    /**
     * SetPageMargins provides a function to set worksheet page margins.
     * @param sheet The worksheet name
     * @param opts The page margin options
     */
    SetPageMargins(sheet: string, opts: PageLayoutMarginsOptions): { error: string | null }

    /**
     * SetPanes provides a function to create and remove freeze panes and split
     * panes by given worksheet name and panes format set.
     * @param sheet The worksheet name
     * @param panes The panes format
     */
    SetPanes(sheet: string, panes: Panes): { error: string | null }

    /**
     * SetRowHeight provides a function to set the height of a single row. If
     * the value of height is 0, will hide the specified row, if the value of
     * height is -1, will unset the custom row height.
     * @param sheet The worksheet name
     * @param row The row number
     * @param height The height of the row
     */
    SetRowHeight(sheet: string, row: number, height : number): { error: string | null }

    /**
     * SetRowOutlineLevel provides a function to set outline level number of a
     * single row by given worksheet name and Excel row number. The value of
     * parameter `level` is 1-7.
     * @param sheet The worksheet name
     * @param row The row number
     * @param level The outline level of the row
     */
    SetRowOutlineLevel(sheet: string, row: number, level: number): { error: string | null }

    /**
     * SetRowStyle provides a function to set the style of rows by given
     * worksheet name, row range, and style ID. Note that this will overwrite
     * the existing styles for the rows, it won't append or merge style with
     * existing styles.
     * @param sheet The worksheet name
     * @param start The start row number
     * @param end Then end row number
     * @param styleID The style ID
     */
    SetRowStyle(sheet: string, start: number, end: number, styleID: number): { error: string | null }

    /**
     * SetRowVisible provides a function to set visible of a single row by given
     * worksheet name and Excel row number. For example, hide row 2 in Sheet1:
     *
     * ```typescript
     * const { error } = f.SetRowVisible('Sheet1', 2, false);
     * ```
     *
     * @param sheet The worksheet name
     * @param row The row number
     * @param visible The row's visibility
     */
    SetRowVisible(sheet: string, row: number, visible: boolean): { error: string | null }

    /**
     * SetSheetCol writes an array to column by given worksheet name, starting
     * cell reference and a pointer to array type 'slice'.
     * @param sheet The worksheet name
     * @param cell The cell reference
     * @param slice The column cells to be write
     */
    SetSheetCol(sheet: string, cell: string, slice: Array<boolean | number | string>): { error: string | null }

    /**
     * SetSheetBackgroundFromBytes provides a function to set background picture
     * by given worksheet name, extension name and image data. Supported image
     * types: BMP, EMF, EMZ, GIF, ICO, JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and
     * WMZ.
     * @param sheet The worksheet name
     * @param extension The extension name
     * @param picture The contents buffer of the file
     */
    SetSheetBackgroundFromBytes(sheet: string, extension: string, picture: Uint8Array): { error: string | null }

    /**
     * SetSheetDimension provides the method to set or remove the used range of
     * the worksheet by a given range reference. It specifies the row and column
     * bounds of used cells in the worksheet. The range reference is set using
     * the A1 reference style(e.g., "A1:D5"). Passing an empty range reference
     * will remove the used range of the worksheet.
     * @param sheet The worksheet name
     * @param rangeRef The top-left and right-bottom cell range reference
     */
    SetSheetDimension(sheet: string, rangeRef: string): { error: string | null }

    /**
     * SetSheetName provides a function to set the worksheet name by given
     * source and target worksheet names. Maximum 31 characters are allowed in
     * sheet title and this function only changes the name of the sheet and
     * will not update the sheet name in the formula or reference associated
     * with the cell. So there may be problem formula error or reference
     * missing.
     * @param source The source sheet name
     * @param target The target sheet name
     */
    SetSheetName(source: string, target: string): { error: string | null }

    /**
     * SetSheetProps provides a function to set worksheet properties.
     * @param sheet The worksheet name
     * @param opts The worksheet property options
     */
    SetSheetProps(sheet: string, opts: SheetPropsOptions): { error: string | null }

    /**
     * SetSheetRow writes an array to row by given worksheet name, starting
     * cell reference and a pointer to array type 'slice'.
     * @param sheet The worksheet name
     * @param cell The starting cell reference
     * @param slice The array for writes
     */
    SetSheetRow(sheet: string, cell: string, slice: Array<boolean | number | string | null>): { error: string | null }

    /**
     * SetSheetView sets sheet view options. The viewIndex may be negative and
     * if so is counted backward (-1 is the last view).
     * @param sheet The worksheet name
     * @param viewIndex The sheet view index
     * @param opts The sheet view options
     */
    SetSheetView(sheet: string, viewIndex: number, opts: ViewOptions): { error: string | null }

    /**
     * SetSheetVisible provides a function to set worksheet visible by given
     * worksheet name. A workbook must contain at least one visible worksheet.
     * If the given worksheet has been activated, this setting will be
     * invalidated.
     * @param sheet The worksheet name
     * @param visible The worksheet visibility
     */
    SetSheetVisible(sheet: string, visible: boolean): { error: string | null }

    /**
     * SetWorkbookProps provides a function to sets workbook properties.
     * @param opts The workbook property options
     */
    SetWorkbookProps(opts: WorkbookPropsOptions): { error: string | null }

    /**
     * UngroupSheets provides a function to ungroup worksheets.
     */
    UngroupSheets(): { error: string | null }

    /**
     * UnmergeCell provides a function to unmerge a given range reference. For
     * example unmerge range reference D3:E9 on Sheet1:
     *
     * ```typescript
     * const { error } = f.UnmergeCell('Sheet1', 'D3', 'E9');
     * ```
     *
     * Attention: overlapped range will also be unmerged.
     * @param sheet The worksheet name
     * @param topLeftCell The top-left cell reference
     * @param bottomRightCell The right-bottom cell reference
     */
    UnmergeCell(sheet: string, topLeftCell: string, bottomRightCell: string): { error: string | null }

    /**
     * UnprotectSheet provides a function to remove protection for a sheet,
     * specified the second optional password parameter to remove sheet
     * protection with password verification.
     * @param sheet The worksheet name
     * @param password The password for sheet protection
     */
    UnprotectSheet(sheet: string, password?: string): { error: string | null }

    /**
     * UnprotectWorkbook provides a function to remove protection for workbook,
     * specified the optional password parameter to remove workbook protection
     * with password verification.
     * @param password The password for workbook protection
     */
    UnprotectWorkbook(password?: string): { error: string | null }

    /**
     * UnsetConditionalFormat provides a function to unset the conditional
     * format by given worksheet name and range reference.
     * @param sheet The worksheet name
     * @param reference The conditional format range reference
     */
    UnsetConditionalFormat(sheet: string, reference: string): { error: string | null }

    /**
     * UpdateLinkedValue fix linked values within a spreadsheet are not
     * updating in Office Excel application. This function will be remove
     * value tag when met a cell have a linked value.
     */
    UpdateLinkedValue(): { error: string | null }

    /**
     * WriteToBuffer provides a function to get the contents buffer from the
     * saved file, and it allocates space in memory. Be careful when the file
     * size is large.
     * @param opts The options for save the spreadsheet
     */
    WriteToBuffer(opts?: Options): { buffer: BlobPart, error: string | null };

    /**
     * Error message
     */
    error?: string | null;
  }

  /**
   * init provides a function to compile and instantiate WebAssembly code by a
   * given compressed wasm archive path.
   * @param path The compressed wasm archive path
   */
  export function init(path: string): Promise<{
    CellNameToCoordinates:                            typeof CellNameToCoordinates,
    ColumnNameToNumber:                               typeof ColumnNameToNumber,
    ColumnNumberToName:                               typeof ColumnNumberToName,
    CoordinatesToCellName:                            typeof CoordinatesToCellName,
    HSLToRGB:                                         typeof HSLToRGB,
    JoinCellName:                                     typeof JoinCellName,
    RGBToHSL:                                         typeof RGBToHSL,
    SplitCellName:                                    typeof SplitCellName,
    ThemeColor:                                       typeof ThemeColor,
    NewFile:                                          typeof NewFile;
    OpenReader:                                       typeof OpenReader;
    CellTypeUnset:                                    typeof CellType.CellTypeUnset;
    CellTypeBool:                                     typeof CellType.CellTypeBool;
    CellTypeDate:                                     typeof CellType.CellTypeDate;
    CellTypeError:                                    typeof CellType.CellTypeError;
    CellTypeFormula:                                  typeof CellType.CellTypeFormula;
    CellTypeInlineString:                             typeof CellType.CellTypeInlineString;
    CellTypeNumber:                                   typeof CellType.CellTypeNumber;
    CellTypeSharedString:                             typeof CellType.CellTypeSharedString;
    CultureNameUnknown:                               typeof CultureName.CultureNameUnknown;
    CultureNameEnUS:                                  typeof CultureName.CultureNameEnUS;
    CultureNameJaJP:                                  typeof CultureName.CultureNameJaJP;
    CultureNameKoKR:                                  typeof CultureName.CultureNameKoKR;
    CultureNameZhCN:                                  typeof CultureName.CultureNameZhCN;
    CultureNameZhTW:                                  typeof CultureName.CultureNameZhTW;
    FormControlNote:                                  typeof FormControlType.FormControlNote;
    FormControlButton:                                typeof FormControlType.FormControlButton;
    FormControlOptionButton:                          typeof FormControlType.FormControlOptionButton;
    FormControlSpinButton:                            typeof FormControlType.FormControlSpinButton;
    FormControlCheckBox:                              typeof FormControlType.FormControlCheckBox;
    FormControlGroupBox:                              typeof FormControlType.FormControlGroupBox;
    FormControlLabel:                                 typeof FormControlType.FormControlLabel;
    FormControlScrollBar:                             typeof FormControlType.FormControlScrollBar;
    Area:                                             typeof ChartType.Area;
    AreaStacked:                                      typeof ChartType.AreaStacked;
    AreaPercentStacked:                               typeof ChartType.AreaPercentStacked;
    Area3D:                                           typeof ChartType.Area3D;
    Area3DStacked:                                    typeof ChartType.Area3DStacked;
    Area3DPercentStacked:                             typeof ChartType.Area3DPercentStacked;
    Bar:                                              typeof ChartType.Bar;
    BarStacked:                                       typeof ChartType.BarStacked;
    BarPercentStacked:                                typeof ChartType.BarPercentStacked;
    Bar3DClustered:                                   typeof ChartType.Bar3DClustered;
    Bar3DStacked:                                     typeof ChartType.Bar3DStacked;
    Bar3DPercentStacked:                              typeof ChartType.Bar3DPercentStacked;
    Bar3DConeClustered:                               typeof ChartType.Bar3DConeClustered;
    Bar3DConeStacked:                                 typeof ChartType.Bar3DConeStacked;
    Bar3DConePercentStacked:                          typeof ChartType.Bar3DConePercentStacked;
    Bar3DPyramidClustered:                            typeof ChartType.Bar3DPyramidClustered;
    Bar3DPyramidStacked:                              typeof ChartType.Bar3DPyramidStacked;
    Bar3DPyramidPercentStacked:                       typeof ChartType.Bar3DPyramidPercentStacked;
    Bar3DCylinderClustered:                           typeof ChartType.Bar3DCylinderClustered;
    Bar3DCylinderStacked:                             typeof ChartType.Bar3DCylinderStacked;
    Bar3DCylinderPercentStacked:                      typeof ChartType.Bar3DCylinderPercentStacked;
    Col:                                              typeof ChartType.Col;
    ColStacked:                                       typeof ChartType.ColStacked;
    ColPercentStacked:                                typeof ChartType.ColPercentStacked;
    Col3D:                                            typeof ChartType.Col3D;
    Col3DClustered:                                   typeof ChartType.Col3DClustered;
    Col3DStacked:                                     typeof ChartType.Col3DStacked;
    Col3DPercentStacked:                              typeof ChartType.Col3DPercentStacked;
    Col3DCone:                                        typeof ChartType.Col3DCone;
    Col3DConeClustered:                               typeof ChartType.Col3DConeClustered;
    Col3DConeStacked:                                 typeof ChartType.Col3DConeStacked;
    Col3DConePercentStacked:                          typeof ChartType.Col3DConePercentStacked;
    Col3DPyramid:                                     typeof ChartType.Col3DPyramid;
    Col3DPyramidClustered:                            typeof ChartType.Col3DPyramidClustered;
    Col3DPyramidStacked:                              typeof ChartType.Col3DPyramidStacked;
    Col3DPyramidPercentStacked:                       typeof ChartType.Col3DPyramidPercentStacked;
    Col3DCylinder:                                    typeof ChartType.Col3DCylinder;
    Col3DCylinderClustered:                           typeof ChartType.Col3DCylinderClustered;
    Col3DCylinderStacked:                             typeof ChartType.Col3DCylinderStacked;
    Col3DCylinderPercentStacked:                      typeof ChartType.Col3DCylinderPercentStacked;
    Doughnut:                                         typeof ChartType.Doughnut;
    Line:                                             typeof ChartType.Line;
    Line3D:                                           typeof ChartType.Line3D;
    Pie:                                              typeof ChartType.Pie;
    Pie3D:                                            typeof ChartType.Pie3D;
    PieOfPie:                                         typeof ChartType.PieOfPie;
    BarOfPie:                                         typeof ChartType.BarOfPie;
    Radar:                                            typeof ChartType.Radar;
    Scatter:                                          typeof ChartType.Scatter;
    Surface3D:                                        typeof ChartType.Surface3D;
    WireframeSurface3D:                               typeof ChartType.WireframeSurface3D;
    Contour:                                          typeof ChartType.Contour;
    WireframeContour:                                 typeof ChartType.WireframeContour;
    Bubble:                                           typeof ChartType.Bubble;
    Bubble3D:                                         typeof ChartType.Bubble3D;
    StockHighLowClose:                                typeof ChartType.StockHighLowClose;
    StockOpenHighLowClose:                            typeof ChartType.StockOpenHighLowClose;
    ChartDataLabelsPositionUnset:                     typeof ChartDataLabelPositionType.ChartDataLabelsPositionUnset;
    ChartDataLabelsPositionBestFit:                   typeof ChartDataLabelPositionType.ChartDataLabelsPositionBestFit;
    ChartDataLabelsPositionBelow:                     typeof ChartDataLabelPositionType.ChartDataLabelsPositionBelow;
    ChartDataLabelsPositionCenter:                    typeof ChartDataLabelPositionType.ChartDataLabelsPositionCenter;
    ChartDataLabelsPositionInsideBase:                typeof ChartDataLabelPositionType.ChartDataLabelsPositionInsideBase;
    ChartDataLabelsPositionInsideEnd:                 typeof ChartDataLabelPositionType.ChartDataLabelsPositionInsideEnd;
    ChartDataLabelsPositionLeft:                      typeof ChartDataLabelPositionType.ChartDataLabelsPositionLeft;
    ChartDataLabelsPositionOutsideEnd:                typeof ChartDataLabelPositionType.ChartDataLabelsPositionOutsideEnd;
    ChartDataLabelsPositionRight:                     typeof ChartDataLabelPositionType.ChartDataLabelsPositionRight;
    ChartDataLabelsPositionAbove:                     typeof ChartDataLabelPositionType.ChartDataLabelsPositionAbove;
    ChartTickLabelNextToAxis:                         typeof ChartTickLabelPositionType.ChartTickLabelNextToAxis;
    ChartTickLabelHigh:                               typeof ChartTickLabelPositionType.ChartTickLabelHigh;
    ChartTickLabelLow:                                typeof ChartTickLabelPositionType.ChartTickLabelLow;
    ChartTickLabelNone:                               typeof ChartTickLabelPositionType.ChartTickLabelNone;
    HeaderFooterImagePositionLeft:                    typeof HeaderFooterImagePositionType.HeaderFooterImagePositionLeft;
    HeaderFooterImagePositionCenter:                  typeof HeaderFooterImagePositionType.HeaderFooterImagePositionCenter;
    HeaderFooterImagePositionRight:                   typeof HeaderFooterImagePositionType.HeaderFooterImagePositionRight;
    IgnoredErrorsEvalError:                           typeof IgnoredErrorsType.IgnoredErrorsEvalError;
    IgnoredErrorsTwoDigitTextYear:                    typeof IgnoredErrorsType.IgnoredErrorsTwoDigitTextYear;
    IgnoredErrorsNumberStoredAsText:                  typeof IgnoredErrorsType.IgnoredErrorsNumberStoredAsText;
    IgnoredErrorsFormula:                             typeof IgnoredErrorsType.IgnoredErrorsFormula;
    IgnoredErrorsFormulaRange:                        typeof IgnoredErrorsType.IgnoredErrorsFormulaRange;
    IgnoredErrorsUnlockedFormula:                     typeof IgnoredErrorsType.IgnoredErrorsUnlockedFormula;
    IgnoredErrorsEmptyCellReference:                  typeof IgnoredErrorsType.IgnoredErrorsEmptyCellReference;
    IgnoredErrorsListDataValidation:                  typeof IgnoredErrorsType.IgnoredErrorsListDataValidation;
    IgnoredErrorsCalculatedColumn:                    typeof IgnoredErrorsType.IgnoredErrorsCalculatedColumn;
    LineDashUnset:                                    typeof LineDashType.LineDashUnset;
    LineDashSolid:                                    typeof LineDashType.LineDashSolid;
    LineDashDot:                                      typeof LineDashType.LineDashDot;
    LineDashDash:                                     typeof LineDashType.LineDashDash;
    LineDashLgDash:                                   typeof LineDashType.LineDashLgDash;
    LineDashSashDot:                                  typeof LineDashType.LineDashSashDot;
    LineDashLgDashDot:                                typeof LineDashType.LineDashLgDashDot;
    LineDashLgDashDotDot:                             typeof LineDashType.LineDashLgDashDotDot;
    LineDashSysDash:                                  typeof LineDashType.LineDashSysDash;
    LineDashSysDot:                                   typeof LineDashType.LineDashSysDot;
    LineDashSysDashDot:                               typeof LineDashType.LineDashSysDashDot;
    LineDashSysDashDotDot:                            typeof LineDashType.LineDashSysDashDotDot;
    LineSolid:                                        typeof LineType.LineSolid;
    LineNone:                                         typeof LineType.LineNone;
    LineAutomatic:                                    typeof LineType.LineAutomatic;
    PictureInsertTypePlaceOverCells:                  typeof PictureInsertType.PictureInsertTypePlaceOverCells,
    PictureInsertTypePlaceInCell:                     typeof PictureInsertType.PictureInsertTypePlaceInCell,
    PictureInsertTypeDISPIMG:                         typeof PictureInsertType.PictureInsertTypeDISPIMG,
    PivotTableShowValuesAsNoCalculation:              typeof PivotTableShowValuesAsType.PivotTableShowValuesAsNoCalculation;
    PivotTableShowValuesAsPercentOfGrandTotal:        typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOfGrandTotal;
    PivotTableShowValuesAsPercentOfColumnTotal:       typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOfColumnTotal;
    PivotTableShowValuesAsPercentOfRowTotal:          typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOfRowTotal;
    PivotTableShowValuesAsPercentOf:                  typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOf;
    PivotTableShowValuesAsPercentOfParentRowTotal:    typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOfParentRowTotal;
    PivotTableShowValuesAsPercentOfParentColumnTotal: typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOfParentColumnTotal;
    PivotTableShowValuesAsPercentOfParentTotal:       typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentOfParentTotal;
    PivotTableShowValuesAsDifferenceFrom:             typeof PivotTableShowValuesAsType.PivotTableShowValuesAsDifferenceFrom;
    PivotTableShowValuesAsPercentDifferenceFrom:      typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentDifferenceFrom;
    PivotTableShowValuesAsRunningTotalIn:             typeof PivotTableShowValuesAsType.PivotTableShowValuesAsRunningTotalIn;
    PivotTableShowValuesAsPercentRunningTotalIn:      typeof PivotTableShowValuesAsType.PivotTableShowValuesAsPercentRunningTotalIn;
    PivotTableShowValuesAsRankSmallestToLargest:      typeof PivotTableShowValuesAsType.PivotTableShowValuesAsRankSmallestToLargest;
    PivotTableShowValuesAsRankLargestToSmallest:      typeof PivotTableShowValuesAsType.PivotTableShowValuesAsRankLargestToSmallest;
    PivotTableShowValuesAsIndex:                      typeof PivotTableShowValuesAsType.PivotTableShowValuesAsIndex;
  }>;
}
