What's new ? Recent bug fixes | xlsgen update history details |
What's new in version 5.0 ?
GROUPBY
, PIVOTBY
and PERCENTOF
enumSortCondition, new enumeration sortcondition_onvalue = 0; sortcondition_oncellbkgndcolor = 1; sortcondition_onfontcolor = 2; sortcondition_onicon = 3; enumLanguage, one enumeration more gencode_powershell = 7 interface IXlsWorkbook, one new property StrictISO29500([out, retval] BOOL* bEnableStrictISO); StrictISO29500([in]BOOL bEnableStrictISO); interface IXlsWorksheetRows, one new property Outline([out, retval] enumOutlineLevel* level); interface IXlsWorksheetColumns, one new property Outline([out, retval] enumOutlineLevel* level); interface IXlsChartDataLabels, two new properties LeaderLinesOptions([out, retval]IXlsChartOptions** options); VectorShape([in]enumVectorShape shapeType); interface IXlsChartDataLabelElement, one new property VectorShape([in]enumVectorShape shapeType); interface IXlsChartBorderStyle, two properties ArrowStyleBeginCap([out, retval] IXlsVectorShapeArrow** beginCap); ArrowStyleEndCap([out, retval] IXlsVectorShapeArrow** endCap); interface IXlsAutoFilter, one new property Sort([out,retval]IXlsSort** sort); interface IXlsSort, two properties, one method CaseSensitive([in]BOOL casesensitive); CaseSensitive([out, retval]BOOL* casesensitive); ByColumn([in]BOOL bycolumn); ByColumn([out, retval]BOOL* bycolumn); NewCondition([out, retval]IXlsSortCondition** cond); interface IXlsSortCondition, new interface ColumnIndex([in]int columnindex); ColumnIndex([out, retval]int* columnindex); SortOnWhat([in]enumSortCondition sortOn); SortOnWhat([out, retval]enumSortCondition* sortOn); CustomList([in]IXlsList* list); SortColor([in]int rgb); SortIconset([in]enumIconSet ics); SortIconsetIndex([in]int nCustomIconIndex); Ascending([in]BOOL bAscending); Ascending([out, retval]BOOL* bAscending); interface IXlsCell, one new property InPlacePicture([in]BSTR filename); interface IXlsCSVImportOptions, one new property DataInRows([in]int rowsOfData);
What's new in version 4.9 ?
ARRAYTOTEXT(array;[format])
, VALUETOTEXT(value;[format])
FIELDVALUE(value;field_name)
and #FIELD!
error type, TEXTBEFORE
, TEXTAFTER
, TEXTSPLIT
, VSTACK
, HSTACK
, TOROW
, TOCOL
, WRAPROWS
, WRAPCOLS
, TAKE
, DROP
, CHOOSEROWS
, CHOOSECOLS
, EXPAND
enumeration enumChartEngine, one new value chartengine_svg = 3; interface IXlsChart, two new methods ExtractAsPNG([in]BSTR filename); ExtractAsSVG([in]BSTR filename); interface IXlsRichLabel, one new property HtmlLabel([in]BSTR label); HtmlLabel([out, retval]BSTR* label); interface IXlsCalculationOptions, one new property MultithreadCores([out, retval]int* nbCores); MultithreadCores([in]int nbCores); interface IXlsWorkbook, one new property DynamicArray([out, retval] BOOL* bEnable); DynamicArray([in]BOOL bEnable); interface IXlsWorksheetLockProperties, two new properties AutoFilters([out, retval] BOOL* lock); AutoFilters([in]BOOL lock); PivotTables([out, retval] BOOL* lock); PivotTables([in]BOOL lock); interface IXlsRange, one new method FillTo([in]IXlsWorksheet* destWorksheet, [in]IXlsRange* destRange, [in]enumPasteOption option); interface IXlsDynamicRange, two new properties UserDefinedFunction([in]BOOL bUserDefinedFunction); Description([out, retval] BSTR* descr); Description([in] BSTR descr); interface IXlsCSVImportOptions, 3 new properties AutoFormatMapping([in]BOOL bEnableAutoFormatMapping); FirstRow([in]int row); FirstColumn([in]int column); AutoFit([in]BOOL autofit); interface IXlsJSONImportOptions, 3 new properties AutoFormatMapping([in]BOOL bEnableAutoFormatMapping); FirstRow([in]int row); FirstColumn([in]int column); AutoFit([in]BOOL autofit); interface IXlsHTMLImportOptions, 3 new properties AutoFormatMapping([in]BOOL bEnableAutoFormatMapping); FirstRow([in]int row); FirstColumn([in]int column); AutoFit([in]BOOL autofit); interface IXlsXMLImportOptions, 3 new properties AutoFormatMapping([in]BOOL bEnableAutoFormatMapping); FirstRow([in]int row); FirstColumn([in]int column); AutoFit([in]BOOL autofit); interface IXlsPivotTableDatasource, two new properties DataConnection([out, retval]IXlsTableDataSource** dataconnection); Refresh(); interface IXlsPivotTableFieldGroupBy, three new properties MinimumValue([in]double minimumValue); MaximumValue([in]double maximumValue); DateInterval([out, retval]enumPivotShowFieldDateGroupBy* DateInterval); DateInterval([in]enumPivotShowFieldDateGroupBy DateInterval); interface IXlsTableDataSource, one new method Run(); interface IXlsWorksheetImport, one new property ElectroCardiogram([out, retval]IXlsElectroCardiogramImport** ecgImporter); interface IXlsElectroCardiogramImport, new interface Options([out, retval]IXlsElectroCardiogramImportOptions** ecgOptions); ImportFile([in]BSTR ecgFilename); interface IXlsElectroCardiogramImportOptions, new interface Charts([in]BOOL bCreateCharts);
What's new in version 4.5 ? (released on October 2017)
ColumnDataMappingFormatByName
, ColumnDataMappingFormatByIndex
)
enumeration enumChartEngine, one new value chartengine_scalable = 2; enumeration enumChartType, two new values charttype_forecast = 52; charttype_overlayline = 53; enumeration enumSpecialCellsType specialcells_type_allformatconditions = 0; specialcells_type_allvalidation = 1; specialcells_type_blanks = 2; specialcells_type_comments = 3; specialcells_type_constants = 4; specialcells_type_formulas = 5; specialcells_type_lastcell = 6; specialcells_type_sameformatconditions = 7; specialcells_type_samevalidation = 8; specialcells_type_visible = 9; enumeration enumSpecialCellsValue specialcells_value_na = 0; specialcells_value_error = 1; specialcells_value_logical = 2; specialcells_value_number = 4; specialcells_value_text = 16; enumeration enumPivotShowFieldValueAs pivotfieldshowas_normal = 0, pivotfieldshowas_differencefrom = 1, pivotfieldshowas_percentageof = 2, pivotfieldshowas_percentageofdifferencefrom = 3, pivotfieldshowas_runningtotal = 4, pivotfieldshowas_percentageofrow = 5, pivotfieldshowas_percentageofcolumn = 6, pivotfieldshowas_percentageoftotal = 7, pivotfieldshowas_index = 8 enumeration enumWorksheetPane worksheetpane_topleft = 0; worksheetpane_topright = 1; worksheetpane_bottomleft = 2; worksheetpane_bottomright = 3; enumeration enumParseFormulaError parseformula_noerror = 0, parseformula_syntaxerror = 1, parseformula_outofmemory = 2, parseformula_notenoughparams = 3, parseformula_toomanyparams = 4, parseformula_impairedparenthesis = 5, parseformula_impairedbrace = 6, parseformula_divisionbyzero = 7, parseformula_functionnotexist = 8, parseformula_wrongargumentseparator = 9 enumeration enumLanguage, one new value gencode_python = 6; interface IXlsXMLImport, new interface Options([out, retval]IXlsXMLImportOptions** xmlOptions); ImportFromURL([in]BSTR url); ImportFile([in]BSTR xmlFilename); ImportBuffer([in]IUnknown* inputLockbytes); interface IXlsXMLImportOptions, new interface HeaderRows([in]int rowsInHeaders); HeaderStyle([in]IXlsStyle* style); ColumnStyleByIndex([in]int columnIndex, [in]IXlsStyle* style); XPath([in]BSTR selectionPath); ColumnDataMappingFormatByIndex([in]int columnIndex, [in]BSTR format); Charset([in]BSTR charset); Language([in]BSTR Language); ColumnDataTypeByIndex([in]int columnIndex, [in]enumDataType datatype); ColumnDataTypeByName([in]BSTR columnName, [in]enumDataType datatype); ColumnStyleByName([in]BSTR columnName, [in]IXlsStyle* style); ColumnDataMappingFormatByName([in]BSTR columnName, [in]BSTR format); ColumnSplitByName([in]BSTR columnName, [out, retval]IXlsImportColumnSplitter** columnSplit); ColumnJoinByName([in]BSTR columnName, [out, retval]IXlsImportColumnJoiner** columnJoin); interface IXlsCSVImport, one new method ImportBuffer([in]IUnknown* inputLockbytes); interface IXlsCSVImportOptions, 10 new properties ColumnDataMappingFormatByIndex([in]int columnIndex, [in]BSTR format); Charset([in]BSTR charset); Language([in]BSTR Language); ColumnPlacementByName([in]BSTR columnName, [in]int startRow, [in]int startColumn); ColumnDataTypeByName([in]BSTR columnName, [in]enumDataType datatype); ColumnStyleByName([in]BSTR columnName, [in]IXlsStyle* style); ColumnFailIfEmptyByName([in]BSTR columnName, [in]BOOL failIfEmpty); ColumnFormulaByName([in]BSTR columnName, [in]BSTR formula); ColumnDataMappingFormatByName([in]BSTR columnName, [in]BSTR format); ColumnConditionalImportFormulaByName([in]BSTR columnName, [in]BSTR formula); ColumnSplitByName([in]BSTR columnName, [out, retval]IXlsImportColumnSplitter** columnSplit); ColumnJoinByName([in]BSTR columnName, [out, retval]IXlsImportColumnJoiner** columnJoin); interface IXlsHTMLImportOptions, 7 new properties ColumnDataMappingFormatByIndex([in]int columnIndex, [in]BSTR format); Charset([in]BSTR charset); Language([in]BSTR Language); ColumnDataTypeByIndex([in]int columnIndex, [in]enumDataType datatype); ColumnDataTypeByName([in]BSTR columnName, [in]enumDataType datatype); ColumnStyleByName([in]BSTR columnName, [in]IXlsStyle* style); ColumnDataMappingFormatByName([in]BSTR columnName, [in]BSTR format); ColumnSplitByName([in]BSTR columnName, [out, retval]IXlsImportColumnSplitter** columnSplit); ColumnJoinByName([in]BSTR columnName, [out, retval]IXlsImportColumnJoiner** columnJoin); interface IXlsJSONImportOptions, 6 new properties ColumnDataMappingFormatByIndex([in]int columnIndex, [in]BSTR format); Charset([in]BSTR charset); Language([in]BSTR Language); ColumnDataTypeByIndex([in]int columnIndex, [in]enumDataType datatype); ColumnDataTypeByName([in]BSTR columnName, [in]enumDataType datatype); ColumnDataMappingFormatByName([in]BSTR columnName, [in]BSTR format); ColumnSplitByName([in]BSTR columnName, [out, retval]IXlsImportColumnSplitter** columnSplit); ColumnJoinByName([in]BSTR columnName, [out, retval]IXlsImportColumnJoiner** columnJoin); interface IXlsWorksheetImport, one new property XML([out, retval]IXlsXMLImport** xmlImporter); interface IXlsImportColumnSplitter, new interface SplitBySeparator([in]WCHAR cSepCharacter); SplitByLength([in]int nSplitLen); AddColumn([in]BSTR name, [out, retval]IXlsImportColumnSplit** splitColumn); interface IXlsImportColumnSplit, new interface Style([in]IXlsStyle* style); NumberFormat([in]BSTR format); interface IXlsImportColumnJoiner, new interface Separator([in]BSTR sSepCharacter); AddColumn([in]BSTR name, [out, retval]IXlsImportColumnJoin** joinColumn); interface IXlsImportColumnJoin, new interface Style([in]IXlsStyle* style); NumberFormat([in]BSTR format); Prefix([in]BSTR columnPrefix); Suffix([in]BSTR columnSuffix); interface IXlsWorksheetExportOptions, one new property UnicodeEncoding([in]BOOL bUnicodeEncoding); interface IXlsWorkbooks, one new property StyleOptimisation([out, retval] BOOL* bStyleOptimisation); StyleOptimisation([in]BOOL bStyleOptimisation); interface IXlsWorkbook, two new properties, one new method R_Programming([out, retval]IXlsRProgramming** rprogramming); ActiveWorksheet([out, retval] IXlsWorksheet** worksheet); TryParseFormula([in]BSTR formula, [out, retval]enumParseFormulaError* error); FormulaDefinitionUpdate([out, retval] BOOL* bUpdate); FormulaDefinitionUpdate([in]BOOL bUpdate); interface IXlsWorksheet, two new properties ActivePane([in]enumWorksheetPane pane); ActivePane([out, retval]enumWorksheetPane* pane); PivotTables([out, retval]IXlsPivotTables** pivottables); interface IXlsRProgramming, new interface Options([out, retval]IXlsRProgrammingOptions** options); Eval([in]BSTR statement); CreateRDataFrameFromExcelRange([in]BSTR dfName, [in]IXlsRange* r); CreateExcelRangeFromRDataFrame([in]IXlsRange* r, [in]BSTR dfName); interface IXlsRProgrammingOptions, new interface R_Home([in]BSTR path); interface IXlsChartBorderStyle, one new property Width([out, retval]double* width); Width([in]double width); interface IXlsChartAxisScale, two new properties MajorDateUnit([out, retval]enumChartAxisDataType* dateUnit); MajorDateUnit([in]enumChartAxisDataType dateUnit); MinorDateUnit([out, retval]enumChartAxisDataType* dateUnit); MinorDateUnit([in]enumChartAxisDataType dateUnit); interface IXlsPivotTableDatasource, one new property RefreshEnabled([in]BOOL bRefreshEnabled); RefreshEnabled([out, retval]BOOL* bRefreshEnabled); interface IXlsPivotTableOptions, ten new properties ShowExpandControls([out, retval]BOOL* bShowExpandControls); ShowExpandControls([in]BOOL bShowExpandControls); ResizeOnUpdate([out, retval]BOOL* bResizeOnUpdate); ResizeOnUpdate([in]BOOL bResizeOnUpdate); MergeItems([out, retval]BOOL* bMergeItems); MergeItems([in]BOOL bMergeItems); ShowGrandTotalsForRows([out, retval]BOOL* bShowGrandTotalRows); ShowGrandTotalsForRows([in]BOOL bShowGrandTotalRows); ShowGrandTotalsForColumns([out, retval]BOOL* bShowGrandTotalColumns); ShowGrandTotalsForColumns([in]BOOL bShowGrandTotalColumns); EnablePivotTableUI([out, retval]BOOL* bEnable); EnablePivotTableUI([in]BOOL bEnable); ShowDetails([out, retval]BOOL* bShow); ShowDetails([in]BOOL bShow); EnableFieldListUI([out, retval]BOOL* bEnable); EnableFieldListUI([in]BOOL bEnable); EnableFieldPropertiesUI([out, retval]BOOL* bEnable); EnableFieldPropertiesUI([in]BOOL bEnable); ShowFieldHeaders([out, retval]BOOL* bShow); ShowFieldHeaders([in]BOOL bShow); interface IXlsPivotTableField, one new property NumberFormat([in]BSTR format); ShowValuesAs([in]enumPivotShowFieldValueAs nShowAs, [out, retval]IXlsPivotTableFieldShowAs** pivotFieldShowAs); GroupBy([out, retval]IXlsPivotTableFieldGroupBy** groupBy); interface IXlsPivotTableFieldShowAs, new interface BasePivotField([in]IXlsPivotTableField* pivotField); BasePivotItem([in]BSTR item); BasePivotPreviousItem(); BasePivotNextItem(); interface IXlsPivotTableFieldGroupBy, new interface Interval([out, retval]double* Interval); Interval([in]double Interval); interface IXlsRange, three new properties SpecialCells([in]enumSpecialCellsType t, [in]enumSpecialCellsValue v, [out, retval] IXlsRange** r); ShiftCellsLeft(); ShiftCellsUp(); interface IXlsDynamicRange, one new property Range([out, retval]IXlsRange** range); interface IXlsHyperlink, one new property UrlEncode([in]BOOL bUrlEncode); interface IXlsPageSetup, one new property PageNumberLeftToRight([in]BOOL pageOrder); PageNumberLeftToRight([out, retval]BOOL* pageOrder); interface IXlsShapes, one new property ItemByName([in]BSTR name, [out, retval]IXlsShape** shape); interface IXlsPictures, three new properties Count([out, retval]int* nbpictures); Item([in]int i, [out, retval]IXlsPicture** picture); ItemByName([in]BSTR name, [out, retval]IXlsPicture** picture); interface IXlsPicture, two new properties Name([out, retval] BSTR* name); Name([in] BSTR name); ChromaKeyColor([out, retval]int* nRGB); ChromaKeyColor([in]int nRGB); interface IXlsChartShapes, one new property TextBoxes([out, retval] IXlsTextBoxes** tbs); interface IXlsTextBoxes, one new property ItemByName([in]BSTR name, [out, retval]IXlsTextBox** tb); interface IXlsTextBox, one new property Name([out, retval] BSTR* name); Name([in] BSTR name); interface IXlsVectorShapes, one new property ItemByName([in]BSTR name, [out, retval]IXlsTextBox** tb); interface IXlsVectorShape, one new property Name([out, retval] BSTR* name); Name([in] BSTR name); interface IXlsCharts, one new property ItemByName([in]BSTR name, [out, retval]IXlsChart** chart); interface IXlsChart, one new property Name([out, retval] BSTR* name); Name([in] BSTR name); interface IXlsPivotTables, new interface Count([out, retval]int* nbpivottables); Item([in]int i, [out, retval]IXlsPivotTable** pt); ItemByName([in]BSTR name, [out, retval]IXlsPivotTable** pt); Add([out, retval]IXlsPivotTable** pt); interface IXlsPivotTable, one new property Name([out, retval] BSTR* name); Name([in] BSTR name); interface IXlsTable, one new property ItemByName([in]BSTR name, [out, retval]IXlsTable** table); interface IXlsTableDataSource, two new properties, one new method Range([out, retval] BSTR* cellrange); Range([in] BSTR cellrange); AddRow(); DataRange([out, retval] BSTR* datarange); DataRange([in] BSTR datarange);
What's new in version 4.0 ? (released on October 2015)
(sample JSON) { "count":2, "cache":false, "environment":"live", "remainingAccesses":231, "data":[ {"date":"2013-12-09", "service":"Be On", "campaign_id":17088, "campaign_name":"DE Peek & Cloppenburg Review Urban Karaoke", "project_id":119, "websites":3, "impressions":48, "views":1, "views_paid":0, "redirects":0, "playtoends":0}, {"date":"2013-12-09", "service":"Be On", "campaign_id":17280, "campaign_name":"DE Telekom Technischer Support", "project_id":137, "websites":4, "impressions":189, "views":47, "views_paid":0, "redirects":2, "playtoends":9} ] }C/C++ code xlsgen::IXlsJSONImportPtr json = worksheet->Import->JSON; xlsgen::IXlsStylePtr style = worksheet->NewStyle(); style->Pattern->BackgroundColor = 0xFFFF00; style->Font->Italic = TRUE; json->Options->ColumnStyleByName[L"City"] = style; json->ImportFile(L"input\\jsonfile3.json");
Lorenz curve (more info)
Moving average (more info)
Macd (more info)
|
|
new enumeration enumAntiAliasing antialiasing_none = 0, antialiasing_level_1 = 1, antialiasing_level_2 = 2, antialiasing_level_3 = 3 new enumeration enumPivotAggregateFunction aggrpivotfunction_none = 0, aggrpivotfunction_average = 1, aggrpivotfunction_count = 2, aggrpivotfunction_countNums = 3, aggrpivotfunction_max = 4, aggrpivotfunction_min = 5, aggrpivotfunction_product = 6, aggrpivotfunction_standarddeviation = 7, aggrpivotfunction_standarddeviationNums = 8, aggrpivotfunction_sum = 9, aggrpivotfunction_variance = 10, aggrpivotfunction_varianceNums = 11 new enumeration enumPivotTableStyle pivottablestyle_none = 0, pivottablestyle_light01 = 1, pivottablestyle_light02 = 2, pivottablestyle_light03 = 3, ... pivottablestyle_light27 = 27, pivottablestyle_light28 = 28, pivottablestyle_medium01 = 29, pivottablestyle_medium02 = 30, pivottablestyle_medium03 = 31, ... pivottablestyle_medium27 = 55, pivottablestyle_medium28 = 56, pivottablestyle_dark01 = 57, pivottablestyle_dark02 = 58, pivottablestyle_dark03 = 59, ... pivottablestyle_dark27 = 83, pivottablestyle_dark28 = 84 new enumeration enumPivotTableAutoFormat pivottableautoformat_simple = 1, pivottableautoformat_classic_1 = 2, pivottableautoformat_classic_2 = 3, pivottableautoformat_classic_3 = 4, pivottableautoformat_accounting_1 = 5, pivottableautoformat_accounting_2 = 6, pivottableautoformat_accounting_3 = 7, pivottableautoformat_accounting_4 = 8, pivottableautoformat_colorful_1 = 9, pivottableautoformat_colorful_2 = 10, pivottableautoformat_colorful_3 = 11, pivottableautoformat_list_1 = 12, pivottableautoformat_list_2 = 13, pivottableautoformat_list_3 = 14, pivottableautoformat_3d_effects_1 = 15, pivottableautoformat_3d_effects_2 = 16, pivottableautoformat_none = 17, pivottableautoformat_japan_2 = 18, pivottableautoformat_japan_3 = 19, pivottableautoformat_japan_4 = 20, pivottableautoformat_none_japan = 21, pivottableautoformat_report_01 = 22, pivottableautoformat_report_02 = 23, pivottableautoformat_report_03 = 24, pivottableautoformat_report_04 = 25, pivottableautoformat_report_05 = 26, pivottableautoformat_report_06 = 27, pivottableautoformat_report_07 = 28, pivottableautoformat_report_08 = 29, pivottableautoformat_report_09 = 30, pivottableautoformat_report_10 = 31, pivottableautoformat_table_01 = 32, pivottableautoformat_table_02 = 33, pivottableautoformat_table_03 = 34, pivottableautoformat_table_04 = 35, pivottableautoformat_table_05 = 36, pivottableautoformat_table_06 = 37, pivottableautoformat_table_07 = 38, pivottableautoformat_table_08 = 39, pivottableautoformat_table_09 = 40, pivottableautoformat_table_10 = 41, pivottableautoformat_pt_classic = 42, pivottableautoformat_pt_none = 43 new enumeration enumPivotTableLayout pivottablelayout_compact = 0, pivottablelayout_outline = 1, pivottablelayout_tabular = 2 new enumeration enumThemeColor themecolor_dark1 = 1, themecolor_light1 = 2, themecolor_dark2 = 3, themecolor_light2 = 4, themecolor_accent1 = 5, themecolor_accent2 = 6, themecolor_accent3 = 7, themecolor_accent4 = 8, themecolor_accent5 = 9, themecolor_accent6 = 10, themecolor_hyperlink = 11, themecolor_folhyperlink = 12 new enumeration enumPredefinedEffect predefinedeffect_1 = 1, predefinedeffect_2 = 2, predefinedeffect_3 = 3, predefinedeffect_4 = 4, predefinedeffect_5 = 5, predefinedeffect_6 = 6, predefinedeffect_7 = 7, predefinedeffect_8 = 8, predefinedeffect_9 = 9, predefinedeffect_10 = 10, predefinedeffect_11 = 11, predefinedeffect_12 = 12 new enumeration enumPredefinedShadow shadoweffect_custom = 0, shadoweffect_outer_bottomright = 1, shadoweffect_outer_bottom = 2, shadoweffect_outer_bottomleft = 3, shadoweffect_outer_right = 4, shadoweffect_outer_center = 5, shadoweffect_outer_left = 6, shadoweffect_outer_topright = 7, shadoweffect_outer_top = 8, shadoweffect_outer_topleft = 9, shadoweffect_inner_topright = 10, shadoweffect_inner_top = 11, shadoweffect_inner_topleft = 12, shadoweffect_inner_left = 13, shadoweffect_inner_center = 14, shadoweffect_inner_right = 15, shadoweffect_inner_bottomleft = 16, shadoweffect_inner_bottom = 17, shadoweffect_inner_bottomright = 18, shadoweffect_perspective_upperleft = 19, shadoweffect_perspective_upperright = 20, shadoweffect_perspective_below = 21, shadoweffect_perspective_lowerleft = 22, shadoweffect_perspective_lowerright = 23 new enumeration enumPredefinedReflection reflectioneffect_custom = 0, reflectioneffect_tight_touching = 1, reflectioneffect_half_touching = 2, reflectioneffect_full_touching = 3, reflectioneffect_tight_4ptdistance = 4, reflectioneffect_half_4ptdistance = 5, reflectioneffect_full_4ptdistance = 6, reflectioneffect_tight_8ptdistance = 7, reflectioneffect_half_8ptdistance = 8, reflectioneffect_full_8ptdistance = 9 new enumeration enumPredefinedSoftEdges softedgeseffect_custom = 0, softedgeseffect_1pt = 1, softedgeseffect_2pt = 2, softedgeseffect_5pt = 3, softedgeseffect_10pt = 4, softedgeseffect_25pt = 5, softedgeseffect_50pt = 6 new enumeration enumPredefinedCamera cameraeffect_custom = 0, cameraeffect_legacyObliqueTopLeft = 1, cameraeffect_legacyObliqueTop = 2, cameraeffect_legacyObliqueTopRight = 3, cameraeffect_legacyObliqueLeft = 4, cameraeffect_legacyObliqueFront = 5, cameraeffect_legacyObliqueRight = 6, cameraeffect_legacyObliqueBottomLeft = 7, cameraeffect_legacyObliqueBottom = 8, cameraeffect_legacyObliqueBottomRight = 9, cameraeffect_legacyPerspectiveTopLeft = 10, cameraeffect_legacyPerspectiveTop = 11, cameraeffect_legacyPerspectiveTopRight = 12, cameraeffect_legacyPerspectiveLeft = 13, cameraeffect_legacyPerspectiveFront = 14, cameraeffect_legacyPerspectiveRight = 15, cameraeffect_legacyPerspectiveBottomLeft = 16, cameraeffect_legacyPerspectiveBottom = 17, cameraeffect_legacyPerspectiveBottomRight = 18, cameraeffect_orthographicFront = 19, cameraeffect_isometricTopUp = 20, cameraeffect_isometricTopDown = 21, cameraeffect_isometricBottomUp = 22, cameraeffect_isometricBottomDown = 23, cameraeffect_isometricLeftUp = 24, cameraeffect_isometricLeftDown = 25, cameraeffect_isometricRightUp = 26, cameraeffect_isometricRightDown = 27, cameraeffect_isometricOffAxis1Left = 28, cameraeffect_isometricOffAxis1Right = 29, cameraeffect_isometricOffAxis1Top = 30, cameraeffect_isometricOffAxis2Left = 31, cameraeffect_isometricOffAxis2Right = 32, cameraeffect_isometricOffAxis2Top = 33, cameraeffect_isometricOffAxis3Left = 34, cameraeffect_isometricOffAxis3Right = 35, cameraeffect_isometricOffAxis3Bottom = 36, cameraeffect_isometricOffAxis4Left = 37, cameraeffect_isometricOffAxis4Right = 38, cameraeffect_isometricOffAxis4Bottom = 39, cameraeffect_obliqueTopLeft = 40, cameraeffect_obliqueTop = 41, cameraeffect_obliqueTopRight = 42, cameraeffect_obliqueLeft = 43, cameraeffect_obliqueRight = 44, cameraeffect_obliqueBottomLeft = 45, cameraeffect_obliqueBottom = 46, cameraeffect_obliqueBottomRight = 47, cameraeffect_perspectiveFront = 48, cameraeffect_perspectiveLeft = 49, cameraeffect_perspectiveRight = 50, cameraeffect_perspectiveAbove = 51, cameraeffect_perspectiveBelow = 52, cameraeffect_perspectiveAboveLeftFacing = 53, cameraeffect_perspectiveAboveRightFacing = 54, cameraeffect_perspectiveContrastingLeftFacing = 55, cameraeffect_perspectiveContrastingRightFacing = 56, cameraeffect_perspectiveHeroicLeftFacing = 57, cameraeffect_perspectiveHeroicRightFacing = 58, cameraeffect_perspectiveHeroicExtremeLeftFacing = 59, cameraeffect_perspectiveHeroicExtremeRightFacing = 60, cameraeffect_perspectiveRelaxed = 61, cameraeffect_perspectiveRelaxedModerately = 62 new enumeration enumPredefinedCameraLight cameralighteffect_legacyFlat1 = 1, cameralighteffect_legacyFlat2 = 2, cameralighteffect_legacyFlat3 = 3, cameralighteffect_legacyFlat4 = 4, cameralighteffect_legacyNormal1 = 5, cameralighteffect_legacyNormal2 = 6, cameralighteffect_legacyNormal3 = 7, cameralighteffect_legacyNormal4 = 8, cameralighteffect_legacyHarsh1 = 9, cameralighteffect_legacyHarsh2 = 10, cameralighteffect_legacyHarsh3 = 11, cameralighteffect_legacyHarsh4 = 12, cameralighteffect_threePt = 13, cameralighteffect_balanced = 14, cameralighteffect_soft = 15, cameralighteffect_harsh = 16, cameralighteffect_flood = 17, cameralighteffect_contrasting = 18, cameralighteffect_morning = 19, cameralighteffect_sunrise = 20, cameralighteffect_sunset = 21, cameralighteffect_chilly = 22, cameralighteffect_freezing = 23, cameralighteffect_flat = 24, cameralighteffect_twoPt = 25, cameralighteffect_glow = 26, cameralighteffect_brightRoom = 27 new enumeration enumPredefinedMaterialBevel materialbevel_relaxedInset = 1, materialbevel_circle = 2, materialbevel_slope = 3, materialbevel_cross = 4, materialbevel_angle = 5, materialbevel_softRound = 6, materialbevel_convex = 7, materialbevel_coolSlant = 8, materialbevel_divot = 9, materialbevel_riblet = 10, materialbevel_hardEdge = 11, materialbevel_artDeco = 12 new enumeration enumPredefinedMaterial material_legacyMatte = 1, material_legacyPlastic = 2, material_legacyMetal = 3, material_legacyWireframe = 4, material_matte = 5, material_plastic = 6, material_metal = 7, material_warmMatte = 8, material_translucentPowder = 9, material_powder = 10, material_dkEdge = 11, material_softEdge = 12, material_clear = 13, material_flat = 14, material_softmetal = 15 enumeration enumChartType, 9 additional members charttype_waterfall = 42; charttype_histogram2016 = 43; charttype_pareto = 44; charttype_boxwhisker = 45; charttype_treemap = 46; charttype_sunburst = 47; charttype_funnel = 48; charttype_lorenzcurve = 49; charttype_movingaverage = 50; charttype_macd = 51; enumeration enumChartTrendLine, 2 additional members charttrendline_movingmedian = 7; charttrendline_exponentialmovingaverage = 8; charttrendline_support = 9; charttrendline_resistance = 10; new enumeration, enumStringMatch stringmatch_strict = 0; stringmatch_punctuations = 1; stringmatch_letters = 2; new enumeration enumListBoxSelectionType listboxtype_singleselection = 0; listboxtype_multipleselection = 1; listboxtype_extendedselection = 2; new enumeration enumValidationTypeEditBox validationtype_editbox_text = 0; validationtype_editbox_number = 1; validationtype_editbox_float = 2; validationtype_editbox_reference = 3; validationtype_editbox_formula = 4; interface IXlsWorkbooks, one new property CSVImportOptions([out, retval]IXlsCSVImportOptions** csvOptions); interface IXlsWorkbook, three new properties AntiAliasing([out, retval] enumAntiAliasing* setting); AntiAliasing([in]enumAntiAliasing setting); MaxRows([out, retval] int* maxrows); MaxColumns([out, retval] int* maxcolumns); FuzzyStringMatch([out, retval] enumStringMatch* nFuzzyStringMatch); FuzzyStringMatch([in]enumStringMatch nFuzzyStringMatch); interface IXlsWorksheet, two new methods, two new properties NewPivotTable([out, retval] IXlsPivotTable** pivotTable); DeleteHyperlinks(); FormControls([out, retval] IXlsFormControls** controls); ProtectedRanges([out, retval] IXlsProtectedRanges** pr); interface IXlsPageSetup, four new properties PageEvenHeader([in]BSTR docheader); PageEvenHeader([out, retval]BSTR* docheader); PageEvenFooter([in]BSTR docfooter); PageEvenFooter([out, retval]BSTR* docfooter); PageFirstHeader([in]BSTR docheader); PageFirstHeader([out, retval]BSTR* docheader); PageFirstFooter([in]BSTR docfooter); PageFirstFooter([out, retval]BSTR* docfooter); PaperSizeForPrinter([in]BSTR printerName, [in]BSTR papersize); interface IXlsRange, two new methods, two new properties DeleteComments(); DeleteHyperlinks(); Local([out, retval]BOOL* bLocal); Local([in]BOOL bLocal); ProtectedRange([out, retval] IXlsProtectedRange** pr); interface IXlsDynamicRange, one new property Local([out, retval]BOOL* bLocal); Local([in]BOOL bLocal); interface IXlsHTMLImport, new interface Options([out, retval]IXlsHTMLImportOptions** htmlOptions); ImportFromURL([in]BSTR url); ImportFile([in]BSTR htmlFilename); ImportBuffer([in]IUnknown* inputLockbytes); interface IXlsHTMLImportOptions, new interface HeaderRows([in]int rowsInHeaders); HeaderStyle([in]IXlsStyle* style); ColumnStyleByIndex([in]int columnIndex, [in]IXlsStyle* style); interface IXlsJSONImport, new interface Options([out, retval]IXlsJSONImportOptions** jsonOptions); ImportFromURL([in]BSTR url); ImportFile([in]BSTR jsonFilename); ImportBuffer([in]IUnknown* inputLockbytes); interface IXlsJSONImportOptions, new interface HeaderStyle([in]IXlsStyle* style); ColumnStyleByIndex([in]int columnIndex, [in]IXlsStyle* style); ColumnStyleByName([in]BSTR columnName, [in]IXlsStyle* style); interface IXlsCSVImportOptions, one new property ForceDataType([in]enumDataType datatype); interface IXlsPattern, one new property Gradient([out, retval]IXlsGradientPattern** gradient); interface IXlsGradientPattern, new interface Enabled([out, retval]BOOL* bEnabled); Enabled([in]BOOL bEnabled); FirstColor([out, retval]int* nRGB); FirstColor([in]int nRGB); SecondColor([out, retval]int* nRGB); SecondColor([in]int nRGB); GradientStyle([out, retval]enumChartGradientStyle* gradientstyle); GradientStyle([in]enumChartGradientStyle gradientstyle); interface IXlsChart, one new property VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); PivotTableDataSource([in]IXlsPivotTable* pivot); interface IXlsChartPatterns, one new property Effect([out, retval]IXlsDrawingEffect** effect); interface IXlsChartDataElement, one new property WaterfallRebase([out, retval]BOOL* b); WaterfallRebase([in]BOOL b); interface IXlsChartSeries, one new property DataWindowSelection([out, retval]int* length); DataWindowSelection([in]int length); TrendLines([in]int i, [out, retval]IXlsChartTrendLine** trendline); interface IXlsChartCustomProperties, one new property WaterfallConnectorLines([out, retval]BOOL* b); WaterfallConnectorLines([in]BOOL b); HistogramBinWidth([out, retval]double* binWidth); HistogramBinWidth([in]double binWidth); HistogramBinCount([out, retval]int* binCount); HistogramBinCount([in]int binCount); HistogramOverflowValue([out, retval]double* nOverflowValue); HistogramOverflowValue([in]double nOverflowValue); HistogramUnderflowValue([out, retval]double* nUnderflowValue); HistogramUnderflowValue([in]double nUnderflowValue); HistogramByCategory([out, retval]BOOL* b); HistogramByCategory([in]BOOL b); interface IXlsChartTextBox, one new property VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); interface IXlsTextBox, one new property VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); interface IXlsVectorShape, one new property VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); interface IXlsPicture, two new properties Effect([out, retval]IXlsDrawingEffect** effect); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); interface IXlsCustomFilter, one new property Delete(); interface IXlsConditionalFormatting, one new property StopIfTrue([out, retval]BOOL* bStopIfTrue); StopIfTrue([in]BOOL bStopIfTrue); interface IXlsColor, new interface RGBColor([out, retval]int* rgb); RGBColor([in]int rgb); ThemeColor([out, retval]enumThemeColor* themeColor); ThemeColor([in]enumThemeColor themeColor); Tint([out, retval]int* percent); Tint([in]int percent); Alpha([out, retval]int* percent); Alpha([in]int percent); interface IXlsTable, one new property Name([out, retval] BSTR* name); Name([in] BSTR name); interface IXlsTableResults, one new property AutoFilter([out, retval]IXlsAutoFilter** autofilter); interface IXlsPivotTable, new interface DataSource([out, retval] IXlsPivotTableDatasource** datasource); Rows([out, retval] IXlsPivotTableFields** rows); Columns([out, retval] IXlsPivotTableFields** columns); Data([out, retval] IXlsPivotTableFields** data); ReportFilters([out, retval] IXlsPivotTableFields** reportfilters); Options([out, retval] IXlsPivotTableOptions** options); InsertAt([in]int row, [in]int column); interface IXlsPivotTableDatasource, new interface Range([in]BSTR dataRange); Range([out, retval]BSTR* dataRange); ExternalWorksheet([in]IXlsWorksheet* worksheet); ExternalWorksheet([out, retval]IXlsWorksheet** worksheet); RefreshOnLoad([in]BOOL bRefreshOnLoad); RefreshOnLoad([out, retval]BOOL* bRefreshOnLoad); interface IXlsPivotTableFields, new interface Count([out, retval]int* count); Item([in]int i, [out, retval]IXlsPivotTableField** pivotField); AddByIndex([in]int i, [out, retval]IXlsPivotTableField** pivotField); AddByName([in]BSTR name, [out, retval]IXlsPivotTableField** pivotField); AddDataFields(); interface IXlsPivotTableField, new interface Name([out, retval]BSTR* name); Name([in]BSTR name); Delete(); AggregateFunction([out, retval]enumPivotAggregateFunction* func); AggregateFunction([in]enumPivotAggregateFunction func); SortAscending([out, retval]BOOL* bAscending); SortAscending([in]BOOL bAscending); SelectAllItems(); UnselectAllItems(); SelectItemByName([in]BSTR item); SelectItemByIndex([in]int item); UnselectItemByName([in]BSTR item); UnselectItemByIndex([in]int item); ItemsSize([out, retval]int* items); interface IXlsPivotTableOptions, new interface BuiltInPivotTableStyle([in]enumPivotTableStyle pivotTableStyle); CustomPivotTableStyle([in]BSTR customPivotTableStyleName); ShowRowHeaders([out, retval]BOOL* bShowRowHeaders); ShowRowHeaders([in]BOOL bShowRowHeaders); ShowColumnHeaders([out, retval]BOOL* bShowColumnHeaders); ShowColumnHeaders([in]BOOL bShowColumnHeaders); ShowRowStripes([out, retval]BOOL* bShowRowStripes); ShowRowStripes([in]BOOL bShowRowStripes); ShowColumnStripes([out, retval]BOOL* bShowColumnStripes); ShowColumnStripes([in]BOOL bShowColumnStripes); BuiltInPivotTableAutoFormat([in]enumPivotTableAutoFormat pivotTableAutoFormat); Layout([out, retval]enumPivotTableLayout* layout); Layout([in]enumPivotTableLayout layout); interface IXlsDrawingEffect, new interface Predefined([in]enumPredefinedEffect predeffect); Blur([out, retval]IXlsDrawingBlur** blur); Shadow([out, retval]IXlsDrawingShadow** shadow); Reflection([out, retval]IXlsDrawingReflection** reflection); Glow([out, retval]IXlsDrawingGlow** glow); SoftEdges([out, retval]IXlsDrawingSoftEdges** softedges); Camera([out, retval]IXlsDrawingCamera** Camera); MaterialAndBevel([out, retval]IXlsDrawingMaterial** Material); interface IXlsDrawingBlur, new interface InsideOnly([out, retval]BOOL* bInsideOnly); InsideOnly([in]BOOL bInsideOnly); Strength([out, retval]int* strength); Strength([in]int strength); interface IXlsDrawingCamera, new interface PredefinedCamera([out, retval]enumPredefinedCamera* pred); PredefinedCamera([in]enumPredefinedCamera pred); RotationX([out, retval]int* angle); RotationX([in]int angle); RotationY([out, retval]int* angle); RotationY([in]int angle); RotationZ([out, retval]int* angle); RotationZ([in]int angle); Perspective([out, retval]int* perspective); Perspective([in]int perspective); ZPosition([out, retval]int* points); ZPosition([in]int points); PredefinedCameraLight([out, retval]enumPredefinedCameraLight* predlight); PredefinedCameraLight([in]enumPredefinedCameraLight predlight); LightAngle([out, retval]int* angle); LightAngle([in]int angle); interface IXlsDrawingGlow, new interface Color([out, retval]IXlsColor** color); Strength([out, retval]int* strength); Strength([in]int strength); interface IXlsDrawingMaterial, new interface PredefinedMaterial([out, retval]enumPredefinedMaterial* material); PredefinedMaterial([in]enumPredefinedMaterial material); TopBevel([out, retval]IXlsDrawingMaterialBevel** topBevel); BottomBevel([out, retval]IXlsDrawingMaterialBevel** bottomBevel); DepthColor([out, retval]IXlsColor** color); ContourColor([out, retval]IXlsColor** color); DepthSize([out, retval]int* points); DepthSize([in]int points); ContourSize([out, retval]int* points); ContourSize([in]int points); interface IXlsDrawingMaterialBevel, new interface PredefinedBevel([out, retval]enumPredefinedMaterialBevel* bevelType); PredefinedBevel([in]enumPredefinedMaterialBevel bevelType); BevelWidth([out, retval]int* points); BevelWidth([in]int points); BevelHeight([out, retval]int* points); BevelHeight([in]int points); interface IXlsDrawingReflection, new interface PredefinedReflection([out, retval]enumPredefinedReflection* predeffect); PredefinedReflection([in]enumPredefinedReflection predeffect); Alpha([out, retval]int* percent); Alpha([in]int percent); Strength([out, retval]int* strength); Strength([in]int strength); ReflectionSize([out, retval]int* percent); ReflectionSize([in]int percent); Distance([out, retval]int* points); Distance([in]int points); interface IXlsDrawingShadow, new interface PredefinedShadow([out, retval]enumPredefinedShadow* predeffect); PredefinedShadow([in]enumPredefinedShadow predeffect); Color([out, retval]IXlsColor** color); ShadowSize([out, retval]int* percent); ShadowSize([in]int percent); Strength([out, retval]int* strength); Strength([in]int strength); Angle([out, retval]int* angle); Angle([in]int angle); Distance([out, retval]int* points); Distance([in]int points); interface IXlsDrawingSoftEdges, new interface PredefinedSoftEdges([out, retval]enumPredefinedSoftEdges* predsoftedges); PredefinedSoftEdges([in]enumPredefinedSoftEdges predsoftedges); Strength([out, retval]int* strength); Strength([in]int strength); interface IXlsFormControls, new interface Buttons([out, retval]IXlsFormButtons** collection); CheckBoxes([out, retval]IXlsFormCheckBoxes** collection); RadioBoxes([out, retval]IXlsFormRadioBoxes** collection); ComboBoxes([out, retval]IXlsFormComboBoxes** collection); SpinControls([out, retval]IXlsFormSpinControls** collection); ListBoxes([out, retval]IXlsFormListBoxes** collection); GroupBoxes([out, retval]IXlsFormGroupBoxes** collection); StaticLabels([out, retval]IXlsFormLabels** collection); Scrollbars([out, retval]IXlsFormScrollbars** collection); EditBoxes([out, retval]IXlsFormEditBoxes** collection); DialogBoxes([out, retval]IXlsFormDialogBoxes** collection); interface IXlsFormButtons, new interface Add([in]BSTR buttonText, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormButton** button); AddInPixels([in]BSTR buttonText, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormButton** button); interface IXlsFormButton, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); Style([in]IXlsStyle* style); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); Name([out, retval]BSTR* name); interface IXlsFormCheckBoxes, new interface Add([in]BSTR text, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormCheckBox** checkbox); AddInPixels([in]BSTR text, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormCheckBox** checkbox); interface IXlsFormCheckBox, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); Checked([in]BOOL b); Checked([out, retval]BOOL* b); LinkedCell([in]BSTR formula); LinkedCell([out, retval]BSTR* formula); Name([out, retval]BSTR* name); Patterns([out, retval]IXlsChartPatterns** patterns); interface IXlsFormComboBoxes, new interface Add([in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormComboBox** combobox); AddInPixels([in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormComboBox** combobox); interface IXlsFormComboBox, new interface AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); LinkedCell([in]BSTR formula); LinkedCell([out, retval]BSTR* formula); InputRange([in]BSTR formula); InputRange([out, retval]BSTR* formula); DropLines([in]int droplines); DropLines([out, retval]int* droplines); SelectItem([in]int index); Name([out, retval]BSTR* name); interface IXlsFormDialogBoxes, new interface Add([in]BSTR text, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormDialogBox** dialogBox); AddInPixels([in]BSTR text, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormDialogBox** dialogBox); interface IXlsFormDialogBox, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); Name([out, retval]BSTR* name); interface IXlsFormEditBoxes, new interface Add([in]BSTR text, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormEditBox** editControl); AddInPixels([in]BSTR text, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormEditBox** editControl); interface IXlsFormEditBox, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); ValidationType([in]enumValidationTypeEditBox validationType); ValidationType([out, retval]enumValidationTypeEditBox* validationType); Multiline([in]BOOL b); Multiline([out, retval]BOOL* b); ShowScrollbar([in]BOOL b); ShowScrollbar([out, retval]BOOL* b); PasswordMode([in]BOOL b); PasswordMode([out, retval]BOOL* b); Name([out, retval]BSTR* name); interface IXlsFormGroupBoxes, new interface Add([in]BSTR text, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormGroupBox** groupBox); AddInPixels([in]BSTR text, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormGroupBox** groupBox); interface IXlsFormGroupBox, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); Name([out, retval]BSTR* name); interface IXlsFormLabels, new interface Add([in]BSTR text, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormLabel** labelControl); AddInPixels([in]BSTR text, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormLabel** labelControl); interface IXlsFormLabel, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); Name([out, retval]BSTR* name); interface IXlsFormListBoxes, new interface Add([in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormListBox** listbox); AddInPixels([in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormListBox** listbox); interface IXlsFormListBox, new interface AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); LinkedCell([in]BSTR formula); LinkedCell([out, retval]BSTR* formula); InputRange([in]BSTR formula); InputRange([out, retval]BSTR* formula); SelectionType([in]enumListBoxSelectionType selectionType); SelectionType([out, retval]enumListBoxSelectionType* selectionType); SelectItem([in]int index); Name([out, retval]BSTR* name); interface IXlsFormRadioBoxes, new interface Add([in]BSTR text, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormRadioBox** radiobox); AddInPixels([in]BSTR text, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormRadioBox** radiobox); interface IXlsFormRadioBox, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); Checked([in]BOOL b); Checked([out, retval]BOOL* b); LinkedCell([in]BSTR formula); LinkedCell([out, retval]BSTR* formula); Name([out, retval]BSTR* name); Patterns([out, retval]IXlsChartPatterns** patterns); interface IXlsFormScrollbars, new interface Add([in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormScrollbar** scrollbar); AddInPixels([in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormScrollbar** scrollbar); interface IXlsFormScrollbar, new interface AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); CurrentValue([in]int v); CurrentValue([out, retval]int* v); MinimumValue([in]int v); MinimumValue([out, retval]int* v); MaximumValue([in]int v); MaximumValue([out, retval]int* v); IncrementValue([in]int increment); IncrementValue([out, retval]int* increment); PageIncrementValue([in]int increment); PageIncrementValue([out, retval]int* increment); Vertical([in]BOOL b); Vertical([out, retval]BOOL* b); LinkedCell([in]BSTR formula); LinkedCell([out, retval]BSTR* formula); Name([out, retval]BSTR* name); interface IXlsFormSpinControls, new interface Add([in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int TopOffset, [in]int LeftOffset, [in]int BottomOffset, [in]int RightOffset, [out, retval]IXlsFormSpinControl** spinControl); AddInPixels([in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsFormSpinControl** spinControl); interface IXlsFormSpinControl, new interface AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); VBAMacro([in]BSTR macro); VBAMacro([out, retval]BSTR* macro); CurrentValue([in]int v); CurrentValue([out, retval]int* v); MinimumValue([in]int v); MinimumValue([out, retval]int* v); MaximumValue([in]int v); MaximumValue([out, retval]int* v); IncrementValue([in]int increment); IncrementValue([out, retval]int* increment); LinkedCell([in]BSTR formula); LinkedCell([out, retval]BSTR* formula); Name([out, retval]BSTR* name); interface IXlsProtectedRanges, new interface Count([out, retval]int* ranges); Item([in]int i, [out, retval]IXlsProtectedRange** pr); interface IXlsProtectedRange, new interface Password([in]BSTR password); Range([out, retval] BSTR* cellrange); Range([in] BSTR cellrange); Delete(); AddUserOrGroup([in]BSTR name);
What's new in version 3.5 ? (released on November 2013)
new enumeration enumChartEngine chartengine_owc = 0, // Microsoft OWC charting component chartengine_builtin = 1 // built-in chart rendering component new enumeration enumPDFEngine pdfengine_bitmap = 0, // legacy PDF engine pdfengine_text = 1 // new PDF engine (selectable text, file size reduction) new enumeration enumSparklineType sparklinetype_line = 0, sparklinetype_columns = 1, sparklinetype_winloss = 2 new enumeration enumSparklineElement sparklineelement_values = 0, sparklineelement_negativevalues = 1, sparklineelement_axis = 2, sparklineelement_markers = 3, sparklineelement_firstvalue = 4, sparklineelement_lastvalue = 5, sparklineelement_maxvalue = 6, sparklineelement_minvalue = 7 updated enumeration enumWorkbookTheme, fourty two new values workbooktheme_olive = 2, workbooktheme_marine = 3 workbooktheme_office = 4, workbooktheme_adjacency = 5, workbooktheme_angles = 6, workbooktheme_apex = 7, workbooktheme_apothecary = 8, workbooktheme_aspect = 9, workbooktheme_austin = 10, workbooktheme_blacktie = 11, workbooktheme_civic = 12, workbooktheme_clarity = 13, workbooktheme_composite = 14, workbooktheme_concourse = 15, workbooktheme_coutoure = 16, workbooktheme_elemental = 17, workbooktheme_equity = 18, workbooktheme_essential = 19, workbooktheme_executive = 20, workbooktheme_flow = 21, workbooktheme_foundry = 22, workbooktheme_grid = 23, workbooktheme_hardcover = 24, workbooktheme_horizon = 25, workbooktheme_median = 26, workbooktheme_metro = 27, workbooktheme_module = 28, workbooktheme_newsprint = 29, workbooktheme_opulent = 30, workbooktheme_oriel = 31, workbooktheme_origin = 32, workbooktheme_paper = 33, workbooktheme_perspective = 34, workbooktheme_pushpin = 35, workbooktheme_slipstream = 36, workbooktheme_solstice = 37, workbooktheme_technic = 38, workbooktheme_thatch = 39, workbooktheme_trek = 40, workbooktheme_urban = 41, workbooktheme_verve = 42, workbooktheme_waveform = 43 updated enumeration enumExcelTargetVersion excelversion_ODF = 7 // Open Office Calc new enumeration enumTableStyle tablestyle_light01 = 1, tablestyle_light02 = 2, tablestyle_light03 = 3, tablestyle_light04 = 4, tablestyle_light05 = 5, tablestyle_light06 = 6, tablestyle_light07 = 7, tablestyle_light08 = 8, tablestyle_light09 = 9, tablestyle_light10 = 10, tablestyle_light11 = 11, tablestyle_light12 = 12, tablestyle_light13 = 13, tablestyle_light14 = 14, tablestyle_light15 = 15, tablestyle_light16 = 16, tablestyle_light17 = 17, tablestyle_light18 = 18, tablestyle_light19 = 19, tablestyle_light20 = 20, tablestyle_light21 = 21, tablestyle_medium01 = 22, tablestyle_medium02 = 23, tablestyle_medium03 = 24, tablestyle_medium04 = 25, tablestyle_medium05 = 26, tablestyle_medium06 = 27, tablestyle_medium07 = 28, tablestyle_medium08 = 29, tablestyle_medium09 = 30, tablestyle_medium10 = 31, tablestyle_medium11 = 32, tablestyle_medium12 = 33, tablestyle_medium13 = 34, tablestyle_medium14 = 35, tablestyle_medium15 = 36, tablestyle_medium16 = 37, tablestyle_medium17 = 38, tablestyle_medium18 = 39, tablestyle_medium19 = 40, tablestyle_medium20 = 41, tablestyle_medium21 = 42, tablestyle_medium22 = 43, tablestyle_medium23 = 44, tablestyle_medium24 = 45, tablestyle_medium25 = 46, tablestyle_medium26 = 47, tablestyle_medium27 = 48, tablestyle_medium28 = 49, tablestyle_dark1 = 50, tablestyle_dark2 = 51, tablestyle_dark3 = 52, tablestyle_dark4 = 53, tablestyle_dark5 = 54, tablestyle_dark6 = 55, tablestyle_dark7 = 56, tablestyle_dark8 = 57, tablestyle_dark9 = 58, tablestyle_dark10 = 59, tablestyle_dark11 = 60 new enumeration enumDataSourceRecordCursor datasourcecursor_none = 1, datasourcecursor_server = 2, datasourcecursor_client = 3 new enumeration enumChartThemeEffectSpan chartthemeeffectspan_none = 1, chartthemeeffectspan_subtle = 2, chartthemeeffectspan_moderate = 3, chartthemeeffectspan_intense = 4, chartthemeeffectspan_none2 = 5, chartthemeeffectspan_intensedark = 6 new enumeration enumChartThemeColorSpan chartthemecolorspan_grayscale = 1, chartthemecolorspan_auto = 2, chartthemecolorspan_primary1 = 3, chartthemecolorspan_primary2 = 4, chartthemecolorspan_primary3 = 5, chartthemecolorspan_primary4 = 6, chartthemecolorspan_primary5 = 7, chartthemecolorspan_primary6 = 8 new enumeration enumDatabarAxisPosition databaraxisposition_automatic = 0, databaraxisposition_center = 1, databaraxisposition_none = 2 interface IXlsEngine, one new method OpenFromMemoryEx([in]IUnknown* inputLockbytes, [in]enumExcelTargetVersion inputVersion, [in]IUnknown* outputLockbytes, [in]enumExcelTargetVersion outputVersion, [out, retval] IXlsWorkbook** workbook); interface IXlsWorkbooks, one new method AddFilenameAssociation([in]BSTR filenameExtension, [in]enumExcelTargetVersion target); interface IXlsWorkbook, five new properties ChartEngine([out, retval] enumChartEngine* engine); ChartEngine([in]enumChartEngine engine); PDFEngine([out, retval] enumPDFEngine* engine); PDFEngine([in]enumPDFEngine engine); ThemeManager([out, retval] IXlsTheme** themeManager); ExternalReferences([out, retval]IXlsExternalReferences** extreferences); InsertFillOption([in]BOOL bFill); interface IXlsWorksheet, seven new properties, 5 new methods OLEObjects([out, retval]IXlsOLEObjects** oleobjects); NewVectorShapeInPixels([in]enumVectorShape shapeType, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsVectorShape** shape); NewPictureInPixels([in]BSTR filename, [in]int top, [in]int left, [in]int bottom, [in]int right); NewPictureInMemoryInPixels([in]VARIANT inputBytearray, [in]enumPictureType picType, [in]int top, [in]int left, [in]int bottom, [in]int right); NewChartInPixels([in]enumChartType type, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval] IXlsChart** chart); NewVisualComponentInPixels([in]BSTR progId, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsVisualComponent** component); NewTextBoxInPixels([in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsTextBox** textbox); Sparklines([out, retval]IXlsSparklines** sparklines); NamedStyle([in]BSTR name, [out, retval] IXlsStyle** style); UsedRange([out, retval]IXlsRange** range); Boolean([in]int row, [in]int col, [in]BOOL b); Boolean([in]int row, [in]int col, [out, retval]BOOL* b); FormulaError([in]int row, [in]int col, [in]enumFormulaError n); FormulaError([in]int row, [in]int col, [out, retval]enumFormulaError* n); SelectionRange([out, retval]IXlsRange** range); interface IXlsWorksheetColumns, three new properties Position([out, retval]int* positionInPixels); Range([out, retval]IXlsRange** range); WidthInPixels([out, retval]int* width_pixels); WidthInPixels([in]int width_pixels); interface IXlsWorksheetRows, two new properties Position([out, retval]int* positionInPixels); Range([out, retval]IXlsRange** range); interface IXlsWorksheetDimensions, one new property Range([out, retval]IXlsRange** range); interface IXlsPageSetup, one new method CopyTo([in]IXlsPageSetup* destPageSetup); interface IXlsOLEObjects, new interface Count([out, retval]int* nbobjects); Item([in]int i, [out, retval]IXlsOleObject** oleObject); NewOLEObject([in]BSTR filename, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int topoffset, [in]int leftoffset, [in]int bottomoffset, [in]int rightoffset, [out, retval]IXlsOLEObject** oleobject); NewOLEObjectInPixels([in]BSTR filename, [in]int top, [in]int left, [in]int bottom, [in]int right, [out, retval]IXlsOLEObject** oleobject); interface IXlsOLEObject, new interface LeftColumn([out, retval]int* col1); RightColumn([out, retval]int* col2); TopCell([out, retval]int* row1); BottomCell([out, retval]int* row2); LeftOffset([out, retval]int* offset); RightOffset([out, retval]int* offset); TopOffset([out, retval]int* offset); BottomOffset([out, retval]int* offset); Filetype([out, retval]BSTR* filetype); ExtractToFile([in]BSTR filename); ExtractToMemory([in]IUnknown* lockbytes); SnapshotFiletype([out, retval]BSTR* snapshotfiletype); ExtractSnapshotToFile([in]BSTR snapshotfilename); FileContentType([out, retval]BSTR* filecontenttype); ServerGUID([out, retval]BSTR* serverguid); interface IXlsSparklines, new interface Count([out, retval]int* nbobjects); Item([in]int i, [out, retval]IXlsSparkline** sparkline); Add([in]enumSparklineType sparklineType, [out, retval]IXlsSparkline** sparkline); Delete([in]int i); interface IXlsSparkline, new interface Count([out, retval]int* nbobjects); Item([in]int i, [out, retval]IXlsSparklineElement** sparklineElement); Add([out, retval]IXlsSparklineElement** sparklineElement); Delete([in]int i); SparklineType([in]enumSparklineType sparklineType); SparklineType([out, retval]enumSparklineType* sparklineType); SparklineColor([in]enumSparklineElement element, [in]int rgb); SparklineColor([in]enumSparklineElement element, [out, retval]int* rgb); ShowMarkers([in]BOOL show); ShowMarkers([out, retval]BOOL* show); ShowMaximumValue([in]BOOL show); ShowMaximumValue([out, retval]BOOL* show); ShowMinimumValue([in]BOOL show); ShowMinimumValue([out, retval]BOOL* show); ShowFirstValue([in]BOOL show); ShowFirstValue([out, retval]BOOL* show); ShowLastValue([in]BOOL show); ShowLastValue([out, retval]BOOL* show); ShowNegativeValues([in]BOOL show); ShowNegativeValues([out, retval]BOOL* show); CustomMinimum([in]double v); CustomMinimum([out, retval]double* v); CustomMaximum([in]double v); CustomMaximum([out, retval]double* v); LineWeight([in]double lineweight); LineWeight([out, retval]double* lineweight); ShowEmptyCellsAs([in]enumChartInterpolate emptycase); ShowEmptyCellsAs([out, retval]enumChartInterpolate* emptycase); ShowHiddenValues([in]BOOL show); ShowHiddenValues([out, retval]BOOL* show); ShowAxis([in]BOOL show); ShowAxis([out, retval]BOOL* show); ShowRightToLeft([in]BOOL show); ShowRightToLeft([out, retval]BOOL* show); CustomDateAxis([in]BSTR rangeAsFormula); CustomDateAxis([out, retval]BSTR* rangeAsFormula); interface IXlsSparklineElement, new interface LocationRow([in]int sparklineLocationRow); LocationRow([out, retval]int* sparklineLocationRow); LocationColumn([in]int sparklineLocationColumn); LocationColumn([out, retval]int* sparklineLocationColumn); DataAsFormula([in]BSTR dataRangeFormula); DataAsFormula([out, retval]BSTR* dataRangeFormula); DataAsRange([in]int row1, [in]int col1, [in]int row2, [in]int col2); interface IXlsTextBox, 4 new properties MarginLeft([in]int pixels); MarginRight([in]int pixels); MarginTop([in]int pixels); MarginBottom([in]int pixels); interface IXlsVectorShape, 4 new properties MarginLeft([in]int pixels); MarginRight([in]int pixels); MarginTop([in]int pixels); MarginBottom([in]int pixels); interface IXlsChartTextBox, 7 new properties FlipHorizontal([out, retval] BOOL* flipHorz); FlipHorizontal([in]BOOL flipHorz); FlipVertical([out, retval] BOOL* flipVert); FlipVertical([in]BOOL flipVert); Rotation([out, retval] int* angle); Rotation([in]int angle); MarginLeft([in]int pixels); MarginRight([in]int pixels); MarginTop([in]int pixels); MarginBottom([in]int pixels); interface IXlsComment, 4 new properties MarginLeft([in]int pixels); MarginRight([in]int pixels); MarginTop([in]int pixels); MarginBottom([in]int pixels); interface IXlsDatabarCondition, 8 new properties ShowBorders([out, retval]BOOL* showborders); ShowBorders([in]BOOL showborders); BordersColor([out, retval] int* nRGB); BordersColor([in]int nRGB); BordersNegativeColor([out, retval] int* nRGB); BordersNegativeColor([in]int nRGB); NegativeColor([out, retval] int* nRGB); NegativeColor([in]int nRGB); AxisColor([out, retval] int* nRGB); AxisColor([in]int nRGB); NegativeColorSameAsPositive([out, retval]BOOL* negativeColorSame); NegativeColorSameAsPositive([in]BOOL negativeColorSame); NegativeBordersColorSameAsPositive([out, retval]BOOL* negativeBordersColorSame); NegativeBordersColorSameAsPositive([in]BOOL negativeBordersColorSame); GradientFill([out, retval]BOOL* borderGradientFill); GradientFill([in]BOOL borderGradientFill); Direction([out, retval] enumTextReadingOrder* readingOrder); Direction([in]enumTextReadingOrder readingOrder); AxisPosition([out, retval] enumDatabarAxisPosition* axisposition); AxisPosition([in]enumDatabarAxisPosition axisposition); Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); interface IXlsDatabarSubCondition, one new property Length([in]int lengthPercent); Length([out, retval]int* lengthPercent); interface IXlsColorScaleCondition, 1 new property Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); interface IXlsIconSetCondition, 1 new property Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); interface IXlsRange, two new methods NewTable([out, retval]IXlsTable** table); CreateNames([in]BOOL bTopHeaders, [in]BOOL bLeftColumn, [in]BOOL bBottomHeaders, [in]BOOL bRightColumn); interface IXlsTable, one new method Delete(); interface IXlsTableDataSource, one new property RecordCursor([out, retval]enumDataSourceRecordCursor* cursorType); RecordCursor([in]enumDataSourceRecordCursor cursorType); interface IXlsTableResults, one new property Style([out, retval]IXlsTableStyle** style); interface IXlsTableStyle, new interface BuiltinStyle([out, retval]enumTableStyle* tableStyle); BuiltinStyle([in]enumTableStyle tableStyle); interface IXlsChartCustomProperties, two new properties ReplaceSeries([out, retval]BOOL* bReplaceSeries); ReplaceSeries([in]BOOL bReplaceSeries); ChartStyle([out, retval]int* nChartStyle); ChartStyle([in]int nChartStyle); interface IXlsChart, one new property Theme([out, retval]IXlsChartTheme** theme); interface IXlsChartTheme, new interface EffectSpan([out, retval] enumChartThemeEffectSpan* effect); EffectSpan([in]enumChartThemeEffectSpan effect); ColorSpan([out, retval] enumChartThemeColorSpan* color); ColorSpan([in]enumChartThemeColorSpan color); interface IXlsTheme, new interface Theme([out, retval] enumWorkbookTheme* theme); Theme([in]enumWorkbookTheme theme); CustomColors([out, retval] enumWorkbookTheme* theme); CustomColors([in]enumWorkbookTheme theme); CustomFonts([out, retval] enumWorkbookTheme* theme); CustomFonts([in]enumWorkbookTheme theme); CustomEffects([out, retval] enumWorkbookTheme* theme); CustomEffects([in]enumWorkbookTheme theme); interface IXlsExternalReferences, new interface Count([out, retval]int* count); Item([in]int i, [out, retval]IXlsExternalReference** extreference); interface IXlsExternalReference, new interface ExcelFilepath([out, retval]BSTR* filename); DDE([out, retval] BOOL* bIsDDE); OLE([out, retval] BOOL* bIsOLE);
What's new in version 3.0 ? (released on September 2011)
new enumeration enumVectorShape see enumVectorShape for more information new enumeration enumVectorShapeArrowStyle vectorshapearrowstyle_none = 0, vectorshapearrowstyle_triangle = 1, vectorshapearrowstyle_stealth = 2, vectorshapearrowstyle_diamond = 3, vectorshapearrowstyle_oval = 4, vectorshapearrowstyle_open = 5 new enumeration enumVectorShapeArrowWidth vectorshapearrowwidth_narrow = 0, vectorshapearrowwidth_medium = 1, vectorshapearrowwidth_wide = 2 new enumeration enumVectorShapeArrowLength vectorshapearrowlength_short = 0, vectorshapearrowlength_medium = 1, vectorshapearrowlength_long = 2 new enumeration enumIconSet iconset_3arrows_colored = 0, iconset_3arrows_gray = 1, iconset_3flags = 2, iconset_3trafficlights_unrimmed = 3, iconset_3trafficlights_rimmed = 4, iconset_3signs = 5, iconset_3symbols_circled = 6, iconset_3symbols_uncircled = 7, iconset_4arrows_colored = 8, iconset_4arrows_gray = 9, iconset_4redtoblack = 10, iconset_4rating = 11, iconset_4trafficlights = 12, iconset_5arrows_colored = 13, iconset_5arrows_gray = 14, iconset_5rating = 15, iconset_5quarters = 16 enumeration enumChartType, two additions charttype_histogram = 32, charttype_outliers = 33, charttype_normalize = 34, charttype_smooth = 35, charttype_bollingerbands = 36, charttype_relativestrengthindex = 37 enumeration enumExcelTargetVersion, one addition excelversion_XPS = 6 new enumeration enumGroupBy groupby_showall = 0, groupby_showduplicates = 1, groupby_showsingle = 2, groupby_showmergedcells = 3 new enumeration enumMapTimeSeries timeseries_years = 0, timeseries_semesters = 1, timeseries_quarters = 2, timeseries_months = 3, timeseries_weeks = 4, timeseries_days = 5, timeseries_hours = 6 new enumeration enumConditionalTimePeriod conditionaltimeperiod_today = 0, conditionaltimeperiod_yesterday = 1, conditionaltimeperiod_tomorrow = 2, conditionaltimeperiod_last7days = 3, conditionaltimeperiod_thismonth = 4, conditionaltimeperiod_lastmonth = 5, conditionaltimeperiod_nextmonth = 6, conditionaltimeperiod_thisweek = 7, conditionaltimeperiod_lastweek = 8, conditionaltimeperiod_nextweek = 9 new enumeration enumPromptType prompttype_singlechoice = 0, prompttype_multiplechoice = 1, prompttype_freechoice = 2 new enumeration enumChartAxisSorting chartaxissorting_none = 0, chartaxissorting_ascending = 1, chartaxissorting_descending = 2, chartaxissorting_gaussian = 3 new enumeration enumSubtotalFunction subtotalfunc_none = 0, subtotalfunc_sum = 1, subtotalfunc_min = 2, subtotalfunc_max = 3, subtotalfunc_average = 4, subtotalfunc_count = 5 subtotalfunc_diff = 6, subtotalfunc_diffp = 7 new enumeration enumRankAverageType rankaveragetype_above = 0, rankaveragetype_below = 1, rankaveragetype_equal_above = 2, rankaveragetype_equal_below = 3, rankaveragetype_1stddev_above = 4, rankaveragetype_1stddev_below = 5, rankaveragetype_2stddev_above = 6, rankaveragetype_2stddev_below = 7, rankaveragetype_3stddev_above = 8, rankaveragetype_3stddev_below = 9 new enumeration enumTextReadingOrder textreadingorder_context = 0, textreadingorder_left_to_right = 1, textreadingorder_right_to_left = 2 new enumeration enumWorkbookTheme workbooktheme_classic = 0, workbooktheme_modern = 1 interface IXlsVectorShapes, new interface Count([out, retval]int* nbvectorshapes); Item([in]int i, [out, retval]IXlsVectorShape** vs); interface IXlsVectorShape, new interface Type([out, retval]enumVectorShape* vectorShapeType); Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); Hyperlink([in]IXlsHyperlink* hlink); AutoSize([out, retval] BOOL* autosize); AutoSize([in]BOOL autosize); Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); Style([in]IXlsStyle* style); LeftColumn([out, retval]int* col1); LeftColumn([in]int col1); RightColumn([out, retval]int* col2); RightColumn([in]int col2); TopCell([out, retval]int* row1); TopCell([in]int row1); BottomCell([out, retval]int* row2); BottomCell([in]int row2); LeftOffset([out, retval]int* offset); LeftOffset([in]int offset); RightOffset([out, retval]int* offset); RightOffset([in]int offset); TopOffset([out, retval]int* offset); TopOffset([in]int offset); BottomOffset([out, retval]int* offset); BottomOffset([in]int offset); Delete(); FlipHorizontal([out, retval] BOOL* flipHorz); FlipHorizontal([in]BOOL flipHorz); FlipVertical([out, retval] BOOL* flipVert); FlipVertical([in]BOOL flipVert); Rotation([out, retval] int* angle); Rotation([in]int angle); ArrowStyleBeginCap([out, retval] IXlsVectorShapeArrow** beginCap); ArrowStyleEndCap([out, retval] IXlsVectorShapeArrow** endCap); Patterns([out, retval] IXlsChartPatterns** patterns); ExtractToFile([out, retval]BSTR* filename); ExtractToMemory([in]IUnknown* lockbytes); AdjustValue([out, retval]int* value); AdjustValue([in]int value); interface IXlsVectorShapeArrow, new interface Style([out, retval]enumVectorShapeArrowStyle* arrowStyle); Style([in]enumVectorShapeArrowStyle arrowStyle); Width([out, retval]enumVectorShapeArrowWidth* arrowWidth); Width([in]enumVectorShapeArrowWidth arrowWidth); Length([out, retval]enumVectorShapeArrowLength* arrowLength); Length([in]enumVectorShapeArrowLength arrowLength); interface IXlsTextBox, one new property Patterns([out, retval] IXlsChartPatterns** patterns); interface IXlsWorkbooks, one new property OpenPassword([in]BSTR openpassword); interface IXlsWorkbook, six new properties, one new method VBAMacros([out, retval]BSTR* macros); VBAModules([out, retval]IXlsVBAModules** modules); EncryptionPassword([in]BSTR encryptionpassword); Filepath([out, retval]BSTR* filepath); VBAWorkbookName([out, retval]BSTR* workbookName); Theme([in]enumWorkbookTheme theme); PrintWith([in]BSTR printerName, [in]BSTR optionalVirtualPrinterFilename); interface IXlsWorksheet, four new methods, five new properties NewList([out, retval] IXlsList** list); NewVectorShape([in]enumVectorShape shapeType, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int topoffset, [in]int leftoffset, [in]int bottomoffset, [in]int rightoffset, [out, retval]IXlsVectorShape** shape); VBAMacros([out, retval]BSTR* macros); VectorShapes([out, retval] IXlsVectorShapes** vss); VBASheetName([out, retval]BSTR* sheetName); IsFormulaCalculated([in]int row, [in]int col, [out, retval]BOOL* bCalculated); CellColumnFromAx([in]BSTR cell, [out, retval]int* column); NewWhatIfTable([in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval]IXlsWhatIfTable** wit); NewScenario([out, retval] IXlsScenario** scenario); interface IXlsWorksheetExport, one new method ExportAsXPS([in]BSTR xpsfilename); interface IXlsWorksheetExportOptions, two new properties CSVSeparator([in]short separator); NumberFormatting([in]BOOL bFormatting); interface IXlsChart, two new methods AddVectorShape([in]enumVectorShape shapeType, [out, retval]IXlsVectorShape** shape); SwitchRowsAndColumns(); interface IXlsChartDynamicDataSource, one new method SwitchRowsAndColumns(); interface IXlsChartDataLabels, one new property FieldSeparator([in]BSTR fieldSeparator); interface IXlsRange, three new methods, two new properties PasteAsList([in]int row, [in]int col, [in]enumPasteOption option); FullRange([out, retval] BSTR* cellrange); RemoveDuplicatesUsingList([in]IXlsList* list); SearchAndReplace([in]BSTR searchWord, [in]BSTR replacementWord, [out, retval]int* nbChanges); PasteTo([in]IUnknown* worksheet, [in]int row, [in]int col, [in]enumPasteOption option); IsFormulaCalculated([out, retval]BOOL* bCalculated); interface IXlsConditionalFormatting, three new properties DatabarCondition([out, retval]IXlsDatabarCondition** dbc); ColorScaleCondition([out, retval]IXlsColorScaleCondition** csc); IconSetCondition([out, retval]IXlsIconSetCondition** isc); interface IXlsDatabarCondition, new interface ShortestBar([out, retval]IXlsDatabarSubCondition** sbc); LongestBar([out, retval]IXlsDatabarSubCondition** lbc); ShowBarsOnly([in]BOOL showbarsonly); ShowBarsOnly([out, retval]BOOL* showbarsonly); Color([out, retval] int* nRGB); Color([in]int nRGB); interface IXlsDatabarSubCondition, new interface ImplicitValue([in]BOOL implicit); ExplicitValueAsFormula([in]BSTR formula); ExplicitPercentAsFormula([in]BSTR formula); ExplicitFormulaAsFormula([in]BSTR formula); ExplicitPercentileAsFormula([in]BSTR formula); interface IXlsColorScaleCondition, new interface Add([out, retval]IXlsColorScaleSubCondition** cssc); interface IXlsColorScaleSubCondition, new interface ImplicitValue([in]BOOL implicit); ExplicitValueAsFormula([in]BSTR formula); ExplicitPercentAsFormula([in]BSTR formula); ExplicitFormulaAsFormula([in]BSTR formula); ExplicitPercentileAsFormula([in]BSTR formula); Color([out, retval] int* nRGB); Color([in]int nRGB); interface IXlsIconSetCondition, new interface Add([out, retval]IXlsIconSetSubCondition** cssc); IconSet([out, retval] enumIconSet* ics); IconSet([in]enumIconSet ics); ShowIconsOnly([out, retval]BOOL* showiconsonly); ShowIconsOnly([in]BOOL showiconsonly); ReverseIcons([out, retval]BOOL* reverse); ReverseIcons([in]BOOL reverse); interface IXlsIconSetSubCondition, new interface ExplicitValueAsFormula([in]BSTR formula); ExplicitPercentAsFormula([in]BSTR formula); ExplicitFormulaAsFormula([in]BSTR formula); ExplicitPercentileAsFormula([in]BSTR formula); StrictOperator([out, retval]BOOL* strictoperator); StrictOperator([in]BOOL strictoperator); interface IXlsPredefinedCondition, 7 new methods TopRatio([in]int values); BottomRatio([in]int values); TopRatioAsPercent([in]double f); BottomRatioAsPercent([in]double f); VersusAverage([in]enumRankAverageType averageType); DuplicateValues(); UniqueValues(); ContainsText([in]BSTR text); NotContainsText([in]BSTR text); BeginsWith([in]BSTR text); EndsWith([in]BSTR text); ContainsBlanks(); NotContainsBlanks(); ContainsErrors(); NotContainsErrors(); DatesMatchingPeriod([in]enumConditionalTimePeriod tp); interface IXlsList, new interface Add([in]BSTR s); AddAlternate([in]BSTR s); Name([in]BSTR name); Name([out, retval]BSTR* name); Count([out, retval]int* nbitems); Item([in]int i, [out, retval]BSTR* s); SelectItem([in]int i); UnselectItem([in]int i); SelectAll(); UnselectAll(); IsSelected([in]int i, [out, retval]BOOL* bItemIsSelected); interface IXlsDynamicRange, one new property ValueIterator([out, retval]IXlsDynamicRangeValueIterator** valueIterator); interface IXlsDynamicRangeValueIterator, new interface ValueWorksheet([out, retval]int* curValueWorksheet); ValueRow([out, retval]int* curValueRow); ValueColumn([out, retval]int* curValuecolumn); Next(); IsLast([out, retval]BOOL* isLast); interface IXlsSort, 3 new methods PrimaryCustomKey([in]int columnindex, [in]IXlsList* list, [in]BOOL bAscending); SecondaryCustomKey([in]int columnindex, [in]IXlsList* list, [in]BOOL bAscending); TertiaryCustomKey([in]int columnindex, [in]IXlsList* list, [in]BOOL bAscending); interface IXlsTables, one new method InferFromWorksheet(); interface IXlsTable, one new property DataHistory([out, retval]IXlsTableHistory** history); interface IXlsTableResults, 6 new methods, one new property Transpose(); RemoveDuplicates([in]IXlsList* list); ApplyTemplate([in]IXlsWorksheet* sheet); TurnToChart([in]enumChartType type); TurnToTable(); Prompts([out, retval]IXlsTablePrompts** prompts); TurnToVisualComponent([in]BSTR progId, [out, retval]IXlsTableVisualComponent** vc); interface IXlsTableHistory, new interface Count([out, retval]int* nbactions); Item([in]int i, [out, retval]IXlsTableHistoryAction** action); interface IXlsTableHistoryAction, new interface Delete(); interface IXlsTableColumns, one new method, one new property AddCalculated([in]BSTR formula, [out, retval]IXlsTableColumn** column); ItemByID([in]BSTR id, [out, retval]IXlsTableColumn** column); interface IXlsTableColumn, 3 new methods, 5 new properties Name([in]BSTR columnname); DisplayOrder([in]int newindex); DisplayOrder([out, retval]int* newindex); Filter([out,retval]IXlsCustomFilter** customFilter); Sorting([out,retval]IXlsTableSort** sort); GroupBy([in]enumGroupBy type); Map([out,retval]IXlsTableMap** mapProperties); ID([out,retval]BSTR* id); AddPrompt([out,retval]IXlsTablePrompt** prompt); AddNestedPrompt([in]IXlsTablePrompt* inputPrompt, [out,retval]IXlsTablePrompt** prompt); Breaks([out,retval]IXlsTableBreaks** breaks); interface IXlsTableMap, new interface TextSeries([in]IXlsList* list); TimeSeries([in]enumFormulaLanguage language, [in]enumMapTimeSeries tseries, [in]BOOL includeYears); interface IXlsTableSort, new interface Order([in]BOOL bAscending); CustomList([in]IXlsList* list); AdditionalKey([in]IXlsTableColumn* column,[out,retval]IXlsTableSort** sort); Apply(); interface IXlsTablePrompts, new interface Count([out, retval]int* nbprompts); Item([in]int i, [out, retval]IXlsTablePrompt** prompt); interface IXlsTablePrompt, new interface Type([in]enumPromptType prompttype); Type([out, retval]enumPromptType* prompttype); Column([out, retval]IXlsTableColumn** column); Description([in]enumFormulaLanguage language, [in]BSTR promptdescription); Description([in]enumFormulaLanguage language, [out, retval]BSTR* promptdescription); AddNestedPrompt([in]IXlsTableColumn* column, [out, retval]IXlsTablePrompt** nestedprompt); NestedPrompt([out, retval]IXlsTablePrompt** nestedprompt); UniqueValues([out, retval] IXlsList** listPromptValues); Apply(); Refresh(); interface IXlsTableBreaks, new interface DistinctValues(); Apply(); Formula([out, retval] BSTR* breakFormula); Formula([in] BSTR breakFormula); Subtotals([out, retval]IXlsTableSubtotals** subtotals); interface IXlsTableSubtotals, new interface Count([out, retval]int* nbsubtotals); Item([in]int i, [out, retval]IXlsTableSubtotal** subtotal); Add([in]IXlsTableColumn* column, [out, retval]IXlsTableSubtotal** subtotal); interface IXlsTableSubtotal, new interface BuiltinFunction([in]enumSubtotalFunction func); BuiltinFunction([out, retval]enumSubtotalFunction* func); Label([in]BSTR label); Label([out, retval]BSTR* label); interface IXlsTableVisualComponent, new interface Column([in] BSTR Name, [in] IXlsTableColumn* column); Formula([in] BSTR Name, [in] BSTR pvValue); Apply(); interface IXlsVBAModules, new interface Count([out, retval]int* nbmodules); Item([in]int i, [out, retval]IXlsVBAModule** vbamodule); interface IXlsVBAModule, new interface Name([out, retval]BSTR* name); VBAMacros([out, retval]BSTR* macros); interface IXlsChartAxis, one new property Sorting([out, retval]enumChartAxisSorting* sorting); Sorting([in]enumChartAxisSorting sorting); interface IXlsCSVImportOptions, one new property ColumnDataMappingFormatByIndex([in]int columnIndex, [in]BSTR format); ColumnConditionalImportFormulaByIndex([in]int columnIndex, [in]BSTR formula); interface IXlsWorksheetColumns, one new method Move([in]int amountColumns); interface IXlsWorksheetRows, one new method Move([in]int amountRows); interface IXlsStyle, one new method Merge([in] IXlsStyle* style); interface IXlsHyperlink, two new properties Top([out, retval]int* row); Left([out, retval]int* col); interface IXlsAlignement, one new property ReadingOrder([out, retval] enumTextReadingOrder* readingOrder); ReadingOrder([in]enumTextReadingOrder readingOrder); interface IXlsChartAlignment, one new property ReadingOrder([out, retval] enumTextReadingOrder* readingOrder); ReadingOrder([in]enumTextReadingOrder readingOrder); interface IXlsChartAreaStyle, 1 new property FillTransparency([in]int which, [out, retval]int* transparency); FillTransparency([in]int which, [in]int transparency); interface IXlsChartCustomProperties, 3 new properties OutlierPercent([out, retval]int* outlier_percent); OutlierPercent([in]int outlier_percent); OutlierAbsoluteMaximum([out, retval]double* outlier_absolute_max); OutlierAbsoluteMaximum([in]double outlier_absolute_max); OutlierAbsoluteMinimum([out, retval]double* outlier_absolute_min); OutlierAbsoluteMinimum([in]double outlier_absolute_min); LowPassFilterAlpha([out, retval]double* alpha); LowPassFilterAlpha([in]double alpha); interface IXlsComment, 2 new properties Style([in]IXlsStyle* style); FillTransparency1([out,retval]int* transparency1); FillTransparency1([in]int transparency1); interface IXlsVisualComponentParameter, 3 new properties ValueAsNumber([in] int pvValue); ValueAsFloat([in] double pvValue); ValueAsLabel([in] BSTR pvValue); interface IXlsPageSetup, one new property GridColor([out, retval] int* nRGB); GridColor([in]int nRGB); interface IXlsWhatIfTable, new interface Formula([in]BSTR formula); HeaderTitle([in]BSTR headerTitle); AddInputValues([out, retval]IXlsWhatIfTableValues** values); interface IXlsWhatIfTableValues, new interface SetInputCell([in]int row, [in]int col); AddValueString([in]BSTR value); AddValueFloat([in]double value); interface IXlsScenarios, new interface interface IXlsScenario, new interface ScenarioName([in]BSTR scenarioname); ScenarioName([out, retval]BSTR* scenarioname); ScenarioCreatedBy([in]BSTR scenariocreatedby); ScenarioCreatedBy([out, retval]BSTR* scenariocreatedby); ScenarioComment([in]BSTR scenariocomment); ScenarioComment([out, retval]BSTR* scenariocomment); ScenarioResultCellsRange([in]BSTR scenarioresultcells); ScenarioResultCellsRange([out, retval]BSTR* scenarioresultcells); ScenarioPreventCellChanges([in]BOOL protection); ScenarioPreventCellChanges([out, retval] BOOL* protection); ScenarioCellHidden([in]BOOL protection); ScenarioCellHidden([out, retval] BOOL* protection); ScenarioAddValue([out, retval]IXlsScenarioValue** scenariovalue); ScenarioValueItem([in]int i, [out, retval]IXlsScenarioValue** scenariovalue); ScenarioValueCount([out, retval]int* scenariovaluecount); ScenarioResultValue([out, retval]IXlsScenarioValue** result); ScenarioSelect(); interface IXlsScenarioValue, new interface ScenarioValueRow([in]int row); ScenarioValueRow([out, retval]int* row); ScenarioValueColumn([in]int col); ScenarioValueColumn([out, retval]int* col); ScenarioValueAsString([in]BSTR value); ScenarioValueAsString([out, retval]BSTR* value); ScenarioValueAsFloat([in]double value); ScenarioValueAsFloat([out, retval]double* value); interface IXlsPicture, one new property Borders([out, retval]IXlsChartBorderStyle** border);
What's new in version 2.9 ? (released on Avril 2009)
new enumeration enumChartAxisDataType chartaxistype_automatic = 0, chartaxistype_date_auto = 1, chartaxistype_date_days = 2, chartaxistype_date_months = 3, chartaxistype_date_years = 4 new enumeration enumWorksheetType worksheettype_worksheet = 0, worksheettype_chart = 1, worksheettype_vbmodule = 2, worksheettype_macrosheet = 3, worksheettype_workspace = 4 IXlsFont interface, one change Size([out, retval] double* size); // previously integers Size([in]double size); // previously integers IXlsChartFont interface, one change Size([out, retval] double* size); // previously integers Size([in]double size); // previously integers IXlsWorksheetExport interface, 2 new methods, 1 new property ExportAsHTML([in]BSTR htmlffilename); ExportAsOpenOfficeFormat([in]BSTR odsfilename); Options([out, retval] IXlsWorksheetExportOptions** options); IXlsWorksheetExportOptions interface, new interface UrlPrefix([in]BSTR urlPrefix); IXlsWorkbook interface, 7 new properties, 2 new methods Commit([in]BOOL bCommit); EvalAsString([in]BSTR formula, [out, retval]BSTR* result); EvalAsFloat([in]BSTR formula, [out, retval]double* result); DisplaySheetTabs([out, retval] BOOL* bSheetTabs); DisplaySheetTabs([in]BOOL bSheetTabs); DisplayRowHeadings([out, retval] BOOL* bRowHeadings); DisplayRowHeadings([in]BOOL bRowHeadings); AutoAdjustDefinedNames([out, retval] BOOL* bAutoAdjustDefinedNames); AutoAdjustDefinedNames([in]BOOL bAutoAdjustDefinedNames); ShowZeros([out, retval] BOOL* bShowZeros); ShowZeros([in]BOOL bShowZeros); IsUsing1904Dates([out, retval] BOOL* b1904Dates); GridA1Mode([out, retval] BOOL* bMode); GridA1Mode([in]BOOL bMode); TreatFloatsAsStrings([out, retval] BOOL* bStrings); TreatFloatsAsStrings([in]BOOL bStrings); IXlsWorksheet interface, 5 new properties, 4 new methods AutoFilters([out, retval] IXlsAutoFilter** autofilter); AddWorksheetAfter([in]BSTR name, [out, retval] IXlsWorksheet** worksheet); AddWorksheetBefore([in]BSTR name, [out, retval] IXlsWorksheet** worksheet); Type([out, retval]enumWorksheetType* sheetType); TextBoxes([out, retval] IXlsTextBoxes** tbs); Tables([out, retval] IXlsTables** tables); InsertTableAt([in]IXlsTable* table, [in]int row, [in]int col); StyleFromLocation([in]int row, [in]int col, [in] IXlsStyle* style); DeleteContents(); IXlsComment interface, 1 new property, 1 new method AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); Delete(); IXlsChart interface, 8 new methods, 3 new properties Shapes([out, retval]IXlsChartShapes** shapes); ExtractToFile([out, retval]BSTR* filename); ExtractToMemory([in]IUnknown* lockbytes); CommitChanges(); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); TurnToStandalone([in]BSTR chartname, [out, retval]IXlsChart** chart); TurnToEmbedded([in]IXlsWorksheet* wksht, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval] IXlsChart** chart); CopyTo([in]IXlsWorksheet* wksht, [out, retval] IXlsChart** chart); CopyToLocation([in]IXlsWorksheet* wksht, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval] IXlsChart** chart); WorksheetHost([out, retval]IXlsWorksheet** wksht); Delete(); IXlsChartTitle interface, 1 new property Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); IXlsChartTextBox interface, 2 new properties Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); IXlsChartDataLabelElement interface, 1 new property Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); IXlsTextBoxes interface, new interface Count([out, retval]int* nbtextboxes); Item([in]int i, [out, retval]IXlsTextBox** tb); IXlsTextBox interface, 11 new properties, 3 new methods Formula([in]BSTR formula); Formula([out, retval]BSTR* formula); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); Style([in]IXlsStyle* style); LeftColumn([out, retval]int* col1); RightColumn([out, retval]int* col2); TopCell([out, retval]int* row1); BottomCell([out, retval]int* row2); LeftOffset([out, retval]int* offset); RightOffset([out, retval]int* offset); TopOffset([out, retval]int* offset); BottomOffset([out, retval]int* offset); ExtractToFile([out, retval]BSTR* filename); ExtractToMemory([in]IUnknown* lockbytes); Delete(); IXlsChartLegend interface, 1 new property Overlap([in]BOOL overlap); Overlap([out, retval]BOOL* overlap); IXlsChartDataSource interface, 1 new property PointsPerSeries([in] double pointsRatio); PointsPerSeries([out,retval] double* pointsRatio); IXlsChartAxis interface, 1 new property Type([out, retval]enumChartAxisDataType* axistype); Type([in]enumChartAxisDataType axistype); IXlsChartShapes interface, new interface Pictures([out, retval]IXlsPictures** pictures); IXlsChartSeries interface, one new property ActualValues([out, retval]BSTR* values); ActualLabels([out, retval]BSTR* labels); IXlsTables interface, 2 new properties, 1 new method Count([out, retval]long* nb); Item([in]int i, [out, retval]IXlsTable** table); Add([out, retval]IXlsTable** table); IXlsTableDataSource interface, 1 new property DatatypesToDumpToFile([in]BSTR filename); CommandTimeout([out, retval]int* commandtimeout); CommandTimeout([in]int commandtimeout); ConnectionTimeout([out, retval]int* connectiontimeout); ConnectionTimeout([in]int connectiontimeout); IXlsTableResults interface, 1 new method InsertAt([in]int row, [in]int col); IXlsTableColumn interface, 1 new property Hidden([in]BOOL bHidden); Hidden([out, retval]BOOL* bHidden); IXlsPredefinedCondition interface, 3 new methods IsNumber(); IsFormula(); GroupBy([in]int column); IXlsRange interface, 11 new methods, 6 new properties Erase(); Transpose([in]enumPasteOption option, [out, retval] BSTR* cellrange); AutoFit(); CalculateFormulas(); DeleteFormulas(); AutoFill(int nDepth); Formula([in]BSTR formula); CopyToClipboard(); SelectByFormula([in]BSTR formula, [out, retval]IXlsRange** range); RemoveDuplicates(); ClearContents(); Label([in]BSTR label); Number([in]int n); Float([in]double f); RichLabel([in]IXlsRichLabel* rl); ClearFormats(); IXlsChartDynamicDataSourceSeries interface, 1 new method Delete(); IXlsPictures interface, 1 new method AddInMemory([in]VARIANT inputBytearray, [in]enumPictureType picType, [out, retval]IXlsPicture** picture); IXlsAutoFilter interface, 1 new method Apply(); Delete(); IXlsCustomFilter interface, 11 new methods TopValues([in]int n); BottomValues([in]int n); TopPercent([in]int percent); BottomPercent([in]int percent); AboveAverage(); BelowAverage(); MatchBlanks(); MatchNonBlanks(); MatchValues([in]BSTR values); MatchStyle([in]IXlsStyle* style); MatchOppositeStyle([in]IXlsStyle* style); IXlsHyperlinks interface, new interface Count([out, retval]int* nbshapes); ItemByIndex([in]int i, [out, retval]IXlsHyperlink** hl); ItemByLocation([in]int row, [in]int col, [out, retval]IXlsHyperlink** hl); IXlsHyperlink interface, 5 new properties, 1 new method FileTarget([out, retval]BSTR* filename); UrlTarget([out, retval]BSTR* url); NamedAnchor([out, retval]BSTR* name); Caption([out, retval]BSTR* caption); FullCellAnchor([out, retval]BSTR* cellanchor); Delete(); IXlsPrintPreview, 1 new method PreviewNextPageAsPNG([in]BSTR pngfile, [out, retval] BOOL* pvContinue); IXlsHelpers interface, a new interface ILockBytes_New([out, retval] VARIANT* lockbytes); ILockBytes_Write([in]VARIANT lockbytes, [out, retval] VARIANT* buffer); ILockBytes_Read([in]VARIANT buffer, [out, retval] VARIANT* lockbytes); ILockBytes_Delete([in]VARIANT lockbytes); WriteFile([in]BSTR filename, [in]VARIANT buffer); IXlsDynamicRange interface, 1 new property Worksheet([out, retval]BSTR* worksheetname); IsTable([out, retval]BOOL* isTable); IXlsPageSetup interface, 1 new property PreviewScale([in]int previewScale); PreviewScale([out, retval]int* previewScale);
What's new in version 2.5 ? (released on May 2007)
[Red][>100]0,00
updated enumeration enumMetadataType metadatatype_notapplicable = 0, metadatatype_hyperlink = 1, metadatatype_formula = 2, metadatatype_mergedcells = 4, metadatatype_datavalidation = 8 updated enumeration enumExcelTargetVersion excelversion_97 = 0, excelversion_2000 = 1, excelversion_XP = 2, excelversion_2003 = 3, excelversion_2007 = 4, excelversion_PDF = 5 new enumeration enumShapeStretchOption shapestretchoption_move_resize = 0, shapestretchoption_nomove_resize = 1, shapestretchoption_move_noresize = 2, shapestretchoption_nomove_noresize = 3 IXlsEngine interface, two new methods, one new property OpenFromMemory([in]VARIANT inputBytearray, [in]VARIANT outputBytearrayOrFilename, [in]enumExcelTargetVersion version, [out, retval] IXlsWorkbook** workbook); Workbooks([out, retval] IXlsWorkbooks** workbooks); ComponentVersion([out, retval]BSTR* versionInfo); IXlsWorkbooks interface, new interface Count([out, retval]int* nbworkbooks); Item([in]int i, [out, retval]IXlsWorkbook** workbook); AddFilepath([in]BSTR filepath); IXlsWorkbook interface, 4 new properties, 2 new methods EnforceDataValidation([out, retval] BOOL* bEnable); EnforceDataValidation([in]BOOL bEnable); Arabic([out, retval] BOOL* bArabic); Arabic([in]BOOL bArabic); AutoOpenExternalWorkbookReference([out, retval] BOOL* bExternalWorkbook); AutoOpenExternalWorkbookReference([in]BOOL bExternalWorkbook); Search([out, retval] IXlsSearch** search); DeleteMacros(); IXlsWorksheet interface, 9 new properties, 5 new methods ColWidth([in]int col, [out, retval]double* width); RowHeight([in]int row, [out, retval]double* height); IsHorizontalPageBreak([in]int row, [out, retval]BOOL* bPageBreak); IsVerticalPageBreak([in]int col, [out, retval]BOOL* bPageBreak); IsCellInsidePrintArea([in]int row, [in]int col, [out, retval]BOOL* bInsidePrintArea); StyleComposedFromLocation([in]int row, [in]int col, [out, retval] IXlsStyle** style); PrintWith([in]BSTR printerName, [in]BSTR optionalVirtualPrinterFilename); PrintPreview([out, retval] IXlsPrintPreview** preview); UnmergeCell([in]int row, [in]int col); DataValidations([out, retval] IXlsDataValidations** datavalidations); Cell([in]int row, [in]int col, [out, retval] IXlsCell** cell); ConditionalFormattings([out, retval] IXlsConditionalFormattings** conditionalformattings); DeleteComment([in]int row, [in]int col); DeleteComments(); NewTable([in]int row, [in]int col, [out, retval] IXlsTable** table); DeleteFormulas(); NewTextBox([in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int topoffset, [in]int leftoffset, [in]int bottomoffset, [in]int rightoffset, [out, retval]IXlsTextBox** textbox); Charts([out, retval] IXlsCharts** charts); Comments([out, retval] IXlsComments** comments); IXlsPageSetup interface, 13 new property getters PrintArea([out,retval]BSTR* cellrange); PageOrientation([out, retval]BOOL* portrait); PaperSize([out, retval]BSTR* papersize); RepeatRows([out, retval]BSTR* repeatrows); RepeatColumns([out, retval]BSTR* repeatcolumns); MarginLeft([out, retval]double* marginleft); MarginTop([out, retval]double* margintop); MarginRight([out, retval]double* marginright); MarginBottom([out, retval]double* marginbottom); MarginHeader([out, retval]double* marginheader); MarginFooter([out, retval]double* marginfooter); FirstPageNumber([out, retval]int* pagenumber); FirstPageNumber([in]int pagenumber); PageBreakPreviewMode([in]BOOL previewmode); ShowGridlines([out, retval]BOOL* gridlines); IXlsMergedCells interface, 4 properties Top([out, retval]int* row); Left([out, retval]int* col); Width([out, retval]int* width); Height([out, retval]int* height); IXlsShape interface, 2 new properties, 2 new methods Type([out, retval]int* shapetype); AlternativeText([out, retval]BSTR* shapetext); ExtractToFile([out, retval]BSTR* filename); ExtractToMemory([in]IUnknown* lockbytes); IXlsVisualComponent interface, 2 new methods ExtractToFile([out, retval]BSTR* filename); ExtractToMemory([in]IUnknown* lockbytes); IXlsPrintPreview interface, new interface PreviewNextPageAsMetafile([in]BSTR metafile, [out, retval] BOOL* pvContinue); PreviewNextPageAsBuffer([in]BOOL bAsEMF, [out, retval] VARIANT* pvBuffer); IXlsDataValidations interface, new interface Count([out, retval]int* nbdatavalidationrules); Item([in]int i, [out, retval]IXlsDataValidation** datavalidationrule); IXlsDataValidation interface, 12 new properties and 1 new method IgnoreErrorIfEmpty([in]BOOL bIgnoreErrorIfEmpty); ShowDropDown([in]BOOL bShowDropDown); ShowInformation([in]BOOL bShowInformation); InformationMessageTitle([in]BSTR informationtitle); InformationMessageBody([in]BSTR informationbody); ShowError([in]BOOL bShowError); ErrorMessageTitle([in]BSTR errortitle); ErrorMessageBody([in]BSTR errorbody); ErrorMessageType([in]enumValidationErrorType type); ValidationType([in]enumValidationType type); ValidationCondition([out, retval]IXlsCellCondition** cc); ValidationFormula([out, retval]IXlsFormulaCondition** fc); Areas([out,retval]BSTR* cellrange); Delete(); IXlsCell interface, new interface with 5 new read/write properties HtmlLabel([in]BSTR label); HtmlNumber([in]BSTR n); HtmlFloat([in]BSTR f); HtmlDate([in]BSTR hdate); HtmlFormula([in]BSTR formula); IXlsConditionalFormattings interface, new interface Count([out, retval]int* nbcondformattings); Item([in]int i, [out, retval]IXlsConditionalFormatting** cf); ItemInCell([in]int row, [in]int col, [out, retval]IXlsConditionalFormatting** cf); IXlsConditionalFormatting interface, 5 new methods Delete(); DeleteAll(); Areas([out,retval]BSTR* cellrange); Areas([in]BSTR cellrange); PredefinedCondition([out, retval]IXlsPredefinedCondition** pc); IXlsPredefinedCondition interface, new interface AlternateRows([in]int alternateRow); AlternateColumns([in]int alternateColumn); TopValues([in]int tops); BottomValues([in]int bottoms); HideErrors(); IXlsTable interface, new interface DataSource([out, retval]IXlsTableDataSource** datasource); DataResults([out, retval]IXlsTableResults** results); IXlsTableDataSource interface, new interface ConnectionString([in]BSTR connectionString); SQLStatement([in]BSTR statement); IXlsTableResults interface, new interface Columns([out, retval]IXlsTableColumns** columns); Insert(); RowCount([out, retval]int* rowcount); Name([out, retval] BSTR* name); Name([in] BSTR name); IXlsTableColumns interface, new interface Count([out, retval]int* nbcolumns); Item([in]int i, [out, retval]IXlsTableColumn** column); IXlsTableColumn interface, new interface HeaderStyle([in]IXlsStyle* style); DataStyle([in]IXlsStyle* style); Name([out, retval]BSTR* columnname); IXlsRange interface, one new method NewSort([out, retval] IXlsSort** sort); IXlsSort interface, new interface PrimaryKey([in]int columnindex, [in]BOOL bAscending); SecondaryKey([in]int columnindex, [in]BOOL bAscending); TertiaryKey([in]int columnindex, [in]BOOL bAscending); Apply(); IXlsWorksheetExport interface, one new method ExportAsPDF([in]BSTR pdffilename); IXlsWorksheetColumns interface, one new property IsEmpty([out, retval]BOOL* isempty); IXlsWorksheetRows interface, one new property IsEmpty([out, retval]BOOL* isempty); IXlsHyperlink interface, one new property Caption([in]BSTR caption); IXlsCharts, new interface Count([out, retval]int* nbcharts); Item([in]int i, [out, retval]IXlsChart** chart); IXlsChartTextBox interface, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); Options([out, retval]IXlsChartOptions** options); Hyperlink([in]IXlsHyperlink* hlink); AutoSize([out, retval] BOOL* autosize); AutoSize([in]BOOL autosize); IXlsTextBox interface, new interface Label([in]BSTR label); Label([out, retval]BSTR* label); RichLabel([in]IXlsRichLabel* rl); Hyperlink([in]IXlsHyperlink* hlink); AutoSize([out, retval] BOOL* autosize); AutoSize([in]BOOL autosize); IXlsComments interface, new interface Count([out, retval]int* nbcomments); ItemByIndex([in]int i, [out, retval]IXlsComment** comment); ItemByLocation([in]int row, [in]int col, [out, retval]IXlsComment** comment); IXlsComment interface, changed method name, 3 new propertiesHRESULT Text([in]BSTR text);HRESULT Label([in]BSTR label); Label([out,retval]BSTR* label); CommentRow([out, retval] int* row); CommentColumn([out, retval] int* column); IXlsPicture interface, 2 new properties StretchOption([out, retval]enumShapeStretchOption* option); StretchOption([in]enumShapeStretchOption option); AlternativeText([out, retval]BSTR* text); AlternativeText([in]BSTR text); IXlsOutline interface, 2 new properties AdditionalHorizontalOutlineLevel([in]enumOutlineLevel outline); AdditionalVerticalOutlineLevel([in]enumOutlineLevel outline);
What's new in version 2.1b ? (released on November 2006)
The following file formats are supported :
More information is provided here. Please note that existing features of xlsgen targeting older versions of Excel still work just fine. xlsgen as a component can now targets different file formats using the same core engine.
Also,
updated enumeration enumExcelTargetVersion excelversion_97 = 0, excelversion_2000 = 1, excelversion_XP = 2, excelversion_2003 = 3, excelversion_2007 = 4 added enumeration enumVisibility visibility_visible = 0, visibility_hidden = 1, visibility_veryhidden = 2 additionational enumeration enumAutoRecalcOption autorecalc_standard = 0, autorecalc_disable = 1, autorecalc_markdirty = 2 added enumeration enumPasteOption pasteoption_values = 0, pasteoption_valuesandformulas = 1, pasteoption_valuesandformatting = 2, pasteoption_valuesandformattingandformulas = 3 additional behavior in IXlsEngine interface, 2 methods can handle Excel 2007 file format extensions New([in]BSTR excelfilename, [out, retval] IXlsWorkbook** workbook); Open([in]BSTR excel_or_csv_filename, [in]BSTR newexcelfilename, [out, retval] IXlsWorkbook** workbook); updated IXlsEngine interface, 2 method signatures changed NewInMemory([in]IUnknown* lockbytes, [in]enumExcelTargetVersion version, [out, retval] IXlsWorkbook** workbook); OpenInMemory([in]BSTR excel_or_csv_filename, [in]IUnknown* lockbytes, [in]enumExcelTargetVersion version, [out, retval] IXlsWorkbook** workbook); IXlsWorkbook interface, three new properties NamedRanges([out, retval]IXlsRanges** namedranges); Shapes([out, retval] IXlsShapes** shapes); FactorizedFloatsMode([in]BOOL bFactorizedFloatsMode); IXlsWorksheet interface, four new methods DuplicateFrom([in]IXlsWorksheet* worksheet); NewVisualComponent([in]BSTR progId, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int topoffset, [in]int leftoffset, [in]int bottomoffset, [in]int rightoffset, [out, retval]IXlsVisualComponent** component); Workbook([out, retval]IXlsWorkbook** workbook); FormattedLabel([in]int row, [in]int col, [out, retval]BSTR* label); updated IXlsWorksheet interface, 2 method signatures changed Hidden([in]enumVisibility nHidden); Hidden([out, retval]enumVisibility* nHidden); IXlsDataValidation interface, one new method AddItemSource([in]BSTR range); IXlsRanges interface, new interface Count([out, retval]int* count); DynamicRange([in]int i, [out, retval]IXlsDynamicRange** dynamicrange); IXlsRange interface, one new method Paste([in]int row, [in]int col, [in]enumPasteOption option); IXlsShapes interface, new interface Count([out, retval]int* nbshapes); Item([in]int i, [out, retval]IXlsShape** shape); IXlsShape interface, new interface LeftColumn([out, retval]int* col1); RightColumn([out, retval]int* col2); TopCell([out, retval]int* row1); BottomCell([out, retval]int* row2); LeftOffset([out, retval]int* offset); RightOffset([out, retval]int* offset); TopOffset([out, retval]int* offset); BottomOffset([out, retval]int* offset); Name([out, retval]BSTR* shapename); Delete(); BringToFront(); IXlsVisualComponent, new interface Count([out, retval] long* lCount); ParameterByIndex([in] int Index, [out, retval]IXlsVisualComponentParameter** parameter); ParameterByName([in] BSTR Name, [out, retval]IXlsVisualComponentParameter** parameter); IXlsVisualComponentParameter, new interface Name([out, retval] BSTR* pbstrName); Type([out, retval] enumDataType* parametertype); NativeType([out, retval] BSTR* parameternativetype); Formula([out, retval] BSTR* pvValue); Formula([in] BSTR pvValue);
What's new in version 2.1 ? (released on June 2006)
Open()
method
Picture
method now called NewPicture
, and only kept for backwards compatibility.
Apply
. In practice, Apply
should only be called to perform a range-based style formatting.
new enumerations enumExcelTargetVersion enumFormulaError updated enumerations enumDataType enumBuiltInNamedRange enumChartResizeOption IXlsWorkbook interface, 4 new properties, one new interface HRESULT IgnoreErrorNumberAsText([in]BOOL bIgnoreError); HRESULT CalculationOptions([out, retval]IXlsCalculationOptions** options); HRESULT CalculateFormulas(); HRESULT ExcelTargetVersion([out, retval] enumExcelTargetVersion* version); HRESULT ExcelTargetVersion([in]enumExcelTargetVersion version); HRESULT Properties([out, retval]IXlsWorkbookProperties** workbookproperties); IXlsWorksheet interface, removal of 3 methods, renaming of one method, two new properties, one new method [removed]HRESULT NewMergedCells([out, retval] IXlsMergedCells** mc); [removed]HRESULT NewOutline([in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval] IXlsOutline** ot); [removed]HRESULT AssignOutline([in]IXlsOutline* ot); [renamed]NewPicture([in]BSTR filename, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int topoffset, [in]int leftoffset, [in]int bottomoffset, [in]int rightoffset); [new]HRESULT Pictures([out, retval] IXlsPictures** pictures); [new]HRESULT CalculateFormula([in]int row, [in]int col); [new]HRESULT CalculateFormulas(); [new]HRESULT Import([out, retval]IXlsWorksheetImport** importer); IXlsWorksheetColumns interface, two new properties HRESULT Hide([out, retval]BOOL* hide); HRESULT Hide([in]BOOL hide); HRESULT Style([out, retval]IXlsStyle** style); HRESULT Style([in]IXlsStyle* style); IXlsWorksheetRows interface, two new properties HRESULT Hide([out, retval]BOOL* hide); HRESULT Hide([in]BOOL hide); HRESULT Style([out, retval]IXlsStyle** style); HRESULT Style([in]IXlsStyle* style); IXlsStyle interface, one new property HRESULT Hidden([out, retval] BOOL* hiddenFormula); HRESULT Hidden([in]BOOL hiddenFormula); IXlsRange interface, 4 new methods HRESULT NewOutline([out, retval] IXlsOutline** ot); HRESULT NewMergedCells([out, retval] IXlsMergedCells** mc); HRESULT Delete(); HRESULT NewAutoFilter([out, retval] IXlsAutoFilter** af); IXlsDynamicRange interface, one new method, one new property HRESULT Delete(); HRESULT BuiltInNamedRange([in]enumBuiltInNamedRange type); IXlsMergedCells interface, all methods removed (irrelevant thanks to the new range model) IXlsOutline interface, 7 methods removed, 2 new properties [removed]HRESULT Label([in]BSTR label); [removed]HRESULT Number([in]int n); [removed]HRESULT Float([in]double f); [removed]HRESULT Formula([in]BSTR formula); [removed]HRESULT RichLabel([in]IXlsRichLabel* rl); [removed]HRESULT Hyperlink([in]IXlsHyperlink* rl); [removed]HRESULT Date([in]BSTR date); [new] HRESULT HorizontalOutlineUpsideDown([in]BOOL upsidedown); [new] HRESULT VerticalOutlineUpsideDown([in]BOOL upsidedown); IXlsPictures interface, new interface HRESULT Add([in]BSTR filename, [out, retval]IXlsPicture** picture); IXlsPicture interface, new interface HRESULT LeftColumn([in]int col1); HRESULT RightColumn([in]int col2); HRESULT TopCell([in]int row1); HRESULT BottomCell([in]int row2); HRESULT LeftOffset([in]int offset); HRESULT RightOffset([in]int offset); HRESULT TopOffset([in]int offset); HRESULT BottomOffset([in]int offset); HRESULT ScaleWidth([in]int scale); HRESULT ScaleHeight([in]int scale); HRESULT LockAspectRatio([in]BOOL locked); IXlsCalculationOptions interface, new interface HRESULT AutoRecalc([out, retval] BOOL* bAutoRecalc); HRESULT AutoRecalc([in]BOOL bAutoRecalc); HRESULT TreatErrorsAsCodeErrors([out, retval] BOOL* bCodeErrors); HRESULT TreatErrorsAsCodeErrors([in]BOOL bCodeErrors); HRESULT LastFormulaError([out, retval]IXlsFormulaError** lastError); IXlsFormulaError interface, a new interface HRESULT FormulaWorksheet([out, retval] int* index); HRESULT FormulaRow([out, retval] int* row); HRESULT FormulaColumn([out, retval] int* column); HRESULT FormulaError([out, retval] enumFormulaError* error); IXlsWorksheetImport interface, a new interface HRESULT CSV([out, retval]IXlsCSVImport** csvImporter); IXlsCSVImport interface, a new interface HRESULT Options([out, retval]IXlsCSVImportOptions** csvOptions); HRESULT ImportFile([in]BSTR csvFilename); IXlsCSVImportOptions interface, a new interface HRESULT SeparationCharacter([in]BSTR character); HRESULT DecimalCharacter([in]BSTR character); HRESULT ImportHeaders([in]BOOL importHeaders); HRESULT HeaderRows([in]int rowsInHeaders); HRESULT HeaderStyle([in]IXlsStyle* style); HRESULT PreserveWhitespace([in]BOOL preserveWhitespace); HRESULT UTF8Encoding([in]BOOL utf8Encoding); HRESULT MultipleWorksheets([in]BOOL multipleWorksheets); HRESULT AbortIfInvalidData([in]BOOL abortIfInvalid); HRESULT ColumnPlacementByIndex([in]int columnIndex, [in]int startRow, [in]int startColumn); HRESULT ColumnDataTypeByIndex([in]int columnIndex, [in]enumDataType datatype); HRESULT ColumnStyleByIndex([in]int columnIndex, [in]IXlsStyle* style); HRESULT ColumnFailIfEmptyByIndex([in]int columnIndex, [in]BOOL failIfEmpty); IXlsAutoFilter interface, a new interface (empty interface) IXlsWorkbookProperties interface, new interface HRESULT SummaryProperties([out, retval]IXlsWorkbookSummaryProperties** summaryproperties); HRESULT CustomProperties([out, retval]IXlsWorkbookCustomProperties** customproperties); IXlsWorkbookSummaryProperties interface, new interface see interface for more information IXlsWorkbookCustomProperties interface, new interface HRESULT Count([out, retval] long* lCount); HRESULT Add([in] BSTR sPropName, [in] VARIANT* Value); HRESULT CustomPropertyByIndex([in] int Index, [out, retval] IXlsWorkbookCustomProperty** customproperty); HRESULT CustomPropertyByName([in] BSTR Name, [out, retval] IXlsWorkbookCustomProperty** customproperty); IXlsWorkbookCustomProperty interface, new interface HRESULT PropertyName([out, retval] BSTR* pbstrName); HRESULT PropertyType([out, retval] enumDataType* custompropertytype); HRESULT PropertyValue([out, retval] VARIANT* pvValue); HRESULT PropertyValue([in] VARIANT* pvValue);
What's new in version 2.0 ? (released on January 2006)
Excel charts and their properties
The ability to create all native Excel charts is definitely a big win for all xlsgen customers out there. That really fills the gap with the existing Excel object model, and there are even less reasons to use it now! Not only all charts are supported, but all of their properties are. The way the xlsgen chart object model was designed, was towards reuse and composition : a simple interface is implemented by many of the chart elements, which provides an effective way to customize charts by only learning very simple things. A good thing is also that most options are automatically set by default, which means it only requires 3 lines of code to create a chart. There are numerous charts examples available in the code samples in all programming environments. Those code samples really go deep down in the breadth of things, and you probably want to take a look at them and then at the corresponding code before you try to figure out how to achieve a particular formatting. More information, and a tutorial is available here.
Excel knows how to host charts in two ways. Either embedded in worksheets like any other floating object like pictures and shapes. Or stand-alone. In fact, if you use Excel and try to insert a new worksheet, you'll see a dialog box come up and ask you which type of worksheet you'd like to insert, among which a worksheet of type chart. Stand-alone charts are just this, and obviously have a data source defined in another worksheet (since they are worksheets themselves without a grid). Using custom properties available from the xlsgen API, you can tell whether you'd like to resize the chart according to the window size in Excel, or if you'd rather not. There is a code sample exactly for that. More information is available here.
This little tool comes handy whenever you'd like to know if an updated version of xlsgen is available online, whether it's a bug fix, or an actual upgrade. The tool connects to the xlsgen website, which may require firewall passing permissions depending on your installation, and gathers the last known version. Also as part of the tool is the ability to know which version you are currently running, and whether or not you are using a registered version. To learn how to use this tool, look here.
That's a very good news for deployment purposes. A simple workaround to COM has been implemented, and that means you can deploy xlsgen.dll in your applications by copying a file and that's all. Thanks to this workaround, the requirement to perform the COM registration at install-time is gone. Since this workaround is implemented at the core, all programming environments benefit from it, especially those have really nothing to do with COM by design, such as Java. Code samples have been updated to use that workaround by default, while the regular COM activation pattern still works fine. This is particularly true of all new code samples brought by release 2.0, those related to charts. For more information, look here.
The Java API gets a pretty clean lift. Introduced a while ago, it has been since a day one a one-to-one match to the original COM counterparts, but perhaps the Java API exposed through the xlsgen.jar package was a little bit too COM-ish. This lift fixes this. It also implies that if you wrote Java xlsgen code, you'll have to update your code. But that's for the better, you won't regret it, and that's very simple anyway. The lift consists in several changes : 1) no more .Release() call thanks to the use of Java garbage collector finalizers. You can leave your existing .Release() statements, but they are not needed anymore. 2) objects now implicitely created, which means you don't have to bother creating instances yourself. Instances are created by the object model which results in a perfect match with how VB or .NET object models publicly expose the xlsgen API. Below is a comparison of an old Java code patter, and the new one. The code samples have been updated to reflect the changes.
// Old Java code pattern
XlsWorkbook workbook = new XlsWorkbook( engine.New("sample1.xls") );
XlsWorksheet wksht = new XlsWorksheet( workbook.AddWorksheet("samplesheet") );
wksht.putLabel(1,2, "Hello world!");
workbook.Close();
wksht.Release();
workbook.Release();
// New Java code pattern
XlsWorkbook workbook = engine.New("sample1.xls");
XlsWorksheet wksht = workbook.AddWorksheet("samplesheet");
wksht.putLabel(1,2, "Hello world!");
workbook.Close();
Native support for date/time types
Date/time content is stored in Excel in numbers. This has required developers wiling to store or retrieve date/time types to do a manual conversion back and forth using classes from the Windows API or other programming frameworks such as MFC's COleDatetime and .NET DateTime. This burden is now taken care of by xlsgen and is exposed through a regular Date property in the worksheet object. You can pass a regular date. You can also retrieve a regular date, and when you do so, xlsgen uses the user regional settings to pick the right country language, and will also use the associated cell number format to build the date representation. For more information, look here.
Improvement to row/column autofit computation
Computing the widths and heights of columns and rows is done entirely by xlsgen at generation time. xlsgen simply grabs the content in cells and makes some text extent computations. With native support for date/time types, it's now possible for xlsgen to really take into account the actual representation of date/time content instead of just how those are internally stored, as numbers. As a consequence, the computation of column widths and row heights are getting much more accurate anytime a cell has a date/time.
Date/time content is stored in Excel in numbers. So far the XML and CSV export features were generating numbers for date/time content. It's not wrong since numbers really mean the amount of seconds elapsed since a given time, and has thus a universal meaning. But understanding a date this way certainly proves hard. That's why the XML and CSV export features create actual date/time representations from now on. Whenever a date/time type is being handled in a cell, the XML export adds a special attribute to it that you may want to parse as well.
Thanks to the bidirectional support for date/time types, code generator is now able to produce statements related to date/time types. It exposes date/time types using the user regional settings (Windows control panel) to translate days and months.
Date/time content is stored in Excel in numbers. The diff tool did find differences across date/time in cells but always produced a representation of this in numbers (seconds elapsed since January 1, 1970) instead of what they mean to users, as in "January 1, 1997". The diff tool now takes advantage of the native support for date/time types to improve the representation of date/time content in workbooks. The improvement is visible when you visualize the color-coded workbooks produced by the diff tool, or the XML output.
Improvement to the search tool
Date/time content is stored in Excel in numbers. Searching for dates using the search tool part of the xlsgen package was not working that well, it could not match a date and a number. Thanks to the native support for date/time types, this limitation is a thing of the past. Date/time content is automatically sorted out in their actual representations, as in "January 1, 1997". As a consequence the search tool can now find date/time fragments such as "January" or "1997" or "January 1".
Formulas and absolute references
Formulas support absolute references, as in $A$1 (alternatively to A1). When is this useful? for instance, when sorting columns in a special way, when specifying a range of a chart data source, in fact anytime you want the cell references to be "hard-coded". Syntactically speaking, the dollar sign can be applied to the column (as in $A1), the row (as in A$1), or both. For more information, look here.
No more green arrows in the diff tool
Diff tool : no more green arrows. Those green arrows were resulting from the fact the diff API created diff-ed workbooks without reproducing actual cell content types. Green arrows are an Excel user interface warning element telling that some content in a cell like a number is stored as a string instead of being stored as a number. For more information, look here.
Workbooks automatically closed
Creatting or updating an Excel workbook using xlsgen implies you open a workbook, do something with it, and finally close it. Depending on how your application is architected, it may be not simple to keep track of running workbook instances that you'd like to close upon some event, like the client application closing itself. Towards this end, xlsgen now automatically closes opened workbooks. While the existing code works just fine, it means you no longer need to make an explicit workbook.Close()
when you are done.
Creating or opening a workbook is a regular file I/O operation and may result into a number of regular I/O-related issues. So far, xlsgen always kept the error types internally and would return a generic error. This could have made I/O-related issues needlessly hard to understand and fix. Now, just to be clear, xlsgen returns a HRESULT of the error that occurred, i.e. the COM-based error identifier.
Picture insertion was introduced a while ago, but it has probably been not straight forward to insert pictures without paying special attention to the sizes. When a picture in inserted, one of its properties defines whether the picture follows cell widths/heights resizings. Beginning with this version, this is not the case anymore, which in turn makes it easier to pictures regardless of what the Excel grid looks like.
Dynamic named ranges are the most general form of named ranges. By definition, a dynamic named range is a formula associated with a name. For more information, look here.
Named ranges can be be hidden/unhidden
Excel has this little known feature which is handy for developers, it's the ability to hide named ranges from the Excel user interface. Named ranges are sometimes used to represent part of the logic of the spreadsheet and it's important to be able to insulate these from the user, either for security reasons or for not willing to take the risk that the user makes a change to them. Excel provides no menu option to unhide named ranges, this has to be done with code. Named ranges can be hidden/unhidden using the xlsgen API, and this applies to both regular named ranges and dynamic named ranges.
Code generation tool : Range/DynamicRange statements
Following the ability to create named ranges governed by formulas instead of static values or references, the code generation tool has been updated to reverse engineer existing dynamic named ranges in workbooks. And proudces the statements. For instance,
IXlsDynamicRange dynrange = worksheet.NewDynamicRange("r2")
dynrange.Formula = "=OFFSET(E4:G6;1;0;1;1)"
C++ smart pointers pattern update
Due to a bug in the Microsoft type-library importer, a change must be made in existing Visual Studio 6 projects in order for client code to continue to work properly with the xlsgen type library. Note that this does not affect any other Visual Studio release (Visual Studio C++ 2002/2003/2005) since Microsoft has fixed the bug in those. Visual C++ 6.0 code samples in the /samples folder have been updated to reflect that.
Old statement :
#import "<path>\xlsgen.dll"
New statement :
#import "<path>\xlsgen.dll" no_function_mapping
A simple Comment API means you can now freely add comments to new or existing Excel files. For more information, see here.
calling user-defined functions in formulas.
The ability to call user-defined functions, otherwise known as add-ins, allows for great multi-workbook scenarios. Both the core xlsgen engine and the code generation tool have been updated to allow you to make local and external user-defined function calls in formulas. Here is an example of how it works :
' declare an external user defined function
' (Book1.xls exposes a VBA procedure called Discount1)
wksht.DeclareUserDefinedFunction("Book1.xls!Discount1")
' create a formula with it
wksht.Formula(15,3) = "=Book1.xls!Discount1(970;3)"
Written in 7 programming languages, and related to charts. Obviously. Adding those to 8 existing ones for each programming language makes 84 samples overall. Sure enough, not all features are covered, but the point is to get you started and use some of the most useful features.
A number of enumerated types and interfaces make their debut to support the creation of charts. enumChartArea enumChartAreaPattern enumChartAxisTickMarks enumChartAxisTicks enumChartAxisType enumChartBarShape enumChartBorder enumChartBorderStyle enumChartBorderWeight enumChartDataLabelPlacement enumChartDataLabels enumChartErrorBar enumChartErrorBarThreshold enumChartFontBackground enumChartGradientPreset enumChartGradientStyle enumChartImageStyle enumChartInterpolate enumChartLegend enumChartMarker enumChartMarkerStyle enumChartPieBuddyType enumChartResizeOption enumChartTexture enumChartTrendLine enumChartType IXlsChart IXlsChart3DPanel IXlsChartAlignment IXlsChartAreaStyle IXlsChartAreaStyleGradient IXlsChartAreaStyleGradientDualColor IXlsChartAreaStyleGradientPreset IXlsChartAreaStyleGradientSingleColor IXlsChartAreaStyleImage IXlsChartAreaStylePattern IXlsChartAreaStyleTexture IXlsChartAxis IXlsChartAxisScale IXlsChartBorderStyle IXlsChartCustomProperties IXlsChartDataElement IXlsChartDataLabelElement IXlsChartDataLabels IXlsChartDataSource IXlsChartDataTable IXlsChartDynamicDataSource IXlsChartDynamicDataSourceSeries IXlsChartErrorBar IXlsChartErrorBarCustom IXlsChartFont IXlsChartLegend IXlsChartLegendEntry IXlsChartMarkerStyle IXlsChartOptions IXlsChartPatterns IXlsChartPieBuddy IXlsChartPlotArea IXlsChartSeries IXlsChartSurfaceArea IXlsChartTitle IXlsChartTrendLine Also, a few existing interfaces have been updated. IXlsWorkbook interface : a new method HRESULT AddChart([in]BSTR name, [in]enumChartType type, [out, retval] IXlsChart** chart); IXlsWorksheet interface : five new methods, and one new property HRESULT NewChart([in]enumChartType type, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval] IXlsChart** chart); HRESULT NewDynamicRange([in]BSTR name, [out, retval]IXlsDynamicRange** range); HRESULT DynamicRange([in]BSTR name, [out, retval]IXlsDynamicRange** range); HRESULT Date([in]int row, [in]int col, [out, retval]BSTR* date); HRESULT Date([in]int row, [in]int col, [in]BSTR date); HRESULT NewComment([in]int row, [in]int col, [out, retval]IXlsComment** comment); HRESULT DeclareUserDefinedFunction([in]BSTR functionname); IXlsRange interface : a new property HRESULT Hidden([out, retval]BOOL* hidden); HRESULT Hidden([in]BOOL hidden); IXlsDynamicRange interface : a new interface HRESULT Name([out, retval] BSTR* name); HRESULT Formula([out, retval] BSTR* formula); HRESULT Formula([in] BSTR formula); HRESULT Hidden([out, retval]BOOL* hidden); HRESULT Hidden([in]BOOL hidden); IXlsMergedCells interface : a new property HRESULT Date([in]BSTR date); IXlsOutline interface : a new property HRESULT Date([in]BSTR date); IXlsComment : a new interface HRESULT Text([in]BSTR text); HRESULT RichText([in]IXlsRichLabel* rl); HRESULT AlwaysShow([out, retval]BOOL* alwaysshow); HRESULT AlwaysShow([in]BOOL alwaysshow); HRESULT Location([in]int row1, [in]int col1, [in]int row2, [in]int col2); HRESULT BackColor([in]int nRGB); HRESULT Translucid([in]BOOL translucid); HRESULT Author([in]BSTR author);
What's new in version 1.9 ? (released on November 2005)
This version really is a major improvement in regards to support for formulas. Now xlsgen supports all of formula functions. No less than 235 built-in Excel functions. Localized function names are supported which means you can work with formulas in English or French (for now). Many bug fixes have been checked-in, including the ability to force a formula recalculation when cells are updated with xlsgen, including a better support for quotes, double-quotes and spaces to name a few. Also it is now possible to read the formula in any cell, the formula is returned using the language of your choice. Finally functions are case insensitive, which means you don't have to worry about using uppercase or not anymore. For more information, see formulas.
In version 1.8, the ability to insert an arbitrary number of rows and columns was introduced. In this version, the complimentory ability to delete an arbitrary number of rows and columns is provided. This provides a feature closure : if you were to write an Excel-like user interface, then you would have all basic cell features required to make that a reality. For more information and row/column deletion, see here.
The ability to insert pictures was introduced in version 1.6. Unfortunately, there were cases were picture insertion would create corrupt Excel files. Those cases were pictures inserted in template files where there are already other rich objects such as charts. This is now fixed.
Conditional formatting objects allow you define formula-based rules. Unfortunately so far xlsgen would hide from you any formula related syntax error. Meaning that you had no idea what was going on. This is fixed.
Range-based conditional formattings
When conditional formattings when introduced circa version 1.0, you were able to create and set conditional formattings to cells. But it's not very productive to iterate through a number of cells only to create conditional formattings on each. Range-based conditional formattings solve that. You can create a range made of one or more cell areas. And then call the appropriate method in the range object in order to create and apply a conditional formatting to the entire range. A single method call makes it possible. For more information, see here.
This property is a built-in Excel cell property. You can find it in the Alignment tab of the Format cells dialog in Excel. It has nothing to do with the row/column Auto-fit feature. Shrink-to-fit is applied at run-time in Excel. For more information, see the IXlsStyle interface.
This property is a built-in Excel cell property. You can find it in the Alignment tab of the Format cells dialog in Excel. It lets you add spaces on the left of any content of a cell. For more information, see the IXlsStyle interface.
The ability to use cells or areas in formulas is great, but the ability to use defined names (a synonym for defined names is named ranges) is greater since a formula may remain untouched while the defined name changes its definition. For more information, see formulas.
Formula code generation in the codegen tool
Improving the support for formulas in xlsgen led me to spread some of the benefits to user tools. The code generation tool so far never produced source code for formulas in Excel files. Now that is something it does. And you can choose the formula language of your choice. For more information, see here.
Formula watching in the diff tool
Improving the support for formulas in xlsgen led me to spread some of the benefits to user tools. The diff tool introduced in version 1.8 allows to watch differences in cells across two revisions of Excel files. Now it is impossible, when needed, to enable formula check instead, anytime you are interested in changes that may have occured in formulas themselves. Like the code generation tool, you can choose the formula language. The diff API also exposes this new capability. For more information, see here.
While there is a property in the worksheet object able to tell if a given cell is part of merged cells, it is consistent to be able to get this information from the introspection metadata type introduced in the previous version. Since metadata types are logically combined, a single call tells you whether or not a cell is a formula and is part of merged cells (for instance). For more information, see here.
There was a longstanding issue with Excel and xlsgen. Excel actually locks in read and write any file it opens and this obviously causes problems to xlsgen whenever xlsgen is supposed to reuse a template to create a new file. Just like Excel does, behind the scene Excel will make a copy of a locked file in the user's temp folder, then open the file from there and will tell the user this file is opened in "read-only" mode, xlsgen will make a copy of this file, and open it from there. This is particularly useful in template scenarios where you work with xlsgen while one or more templates are opened in Excel as you work/refine them.
enumFormulaLanguage : a new enumeration for formula languages formulalanguage_en = 0, formulalanguage_fr = 1, enumMetadataType : a new item in an existng enumeration for cell metadata types metadatatype_mergedcells = 4 IXlsEngineDiff interface : two new properties HRESULT EnableFormulaCheck([out, retval] BOOL* bCheckFormulas); HRESULT EnableFormulaCheck([in]BOOL bCheckFormulas); HRESULT FormulaLanguage([out, retval] enumFormulaLanguage* language); HRESULT FormulaLanguage([in]enumFormulaLanguage language); IXlsWorkbook interface : one new property HRESULT FormulaLanguage([out, retval] enumFormulaLanguage* language); HRESULT FormulaLanguage([in]enumFormulaLanguage language); IXlsWorksheet interface : one new property HRESULT Formula([in]int row, [in]int col, [out, retval]BSTR* formula); IXlsWorksheetColumns : a new method HRESULT Delete(); IXlsWorksheetRows : a new method HRESULT Delete(); IXlsStyle : 2 new properties HRESULT ShrinkToFit([out, retval] BOOL* shrinktofit); HRESULT ShrinkToFit([in]BOOL shrinktofit); HRESULT Indentation([out, retval] int* indentLevel); HRESULT Indentation([in]int indentLevel); IXlsRange : one new method HRESULT NewConditionalFormatting([out, retval] IXlsConditionalFormatting** cf);
What's new in version 1.8 ? (released on September 2005)
This version is several orders of magnitude faster than the previous versions (yes, you read it well). Previous versions were already much faster than Excel automation thanks to the fact that xlsgen being a dll, it gets loaded in-process into whatever host application and the whole marshalling and sandwiching of types does not occur thanks to that. On the other hand, Excel seems to do a lot more computation and object synching whenever a method is called or property is accessed, that's not what a generator like xlsgen does. For the generation phase, when an Excel workbook is created, the big perf boost was obtained by using a generalized buffer pool (essentially behaving like a home made garbage collector) which in practice allows to do plenty of things without allocating or freeing anything from the memory. For the reading phase, a substantial work has allowed to come up with a matrix for the handling of content in worksheets. This matrix allows no less than direct access to cells, unlike previous versions of the product. In short, xlsgen is much faster now and consumes a lot less memory. The automated regression check framework has been very key to make big changes to the underlying implementation without breaking anything.
Version 1.8 introduces a new end-user tool with the ability to compute differences between Excel files. It makes most sense when you are trying to figure out differences between revisions of some Excel file. The tool is a front end of a general diffing API in xlsgen. Aside computing the amount of differences, the features let you create a color-coded Excel workbook showing where the differences are, complete with hyperlinks to previous values. Alternatively, developers may want to generate an xml output and proceed from that. For more information, see here.
The diff tool has a bunch of options. All of these are exposed in the API. You can process entire folders of Excel files instead of just one pair. You can exclude one or more cell ranges, which is handy in scenarios where you know some cell always change (for instance a formula with a running date). You can also ignore the worksheet names for the diff process, which is handy whenever the changes include a rename of one or more worksheets. Last but not least, wildcards in the file paths let you accurately perform diffs between Excel files in the same folder or in different folders. For more information, see here.
With the Range object in xlsgen, it's already possible to create a range, and apply a style to all the cells that it defines ; it's also possible to read the definition of an existing named range and change its definition. Now it's possible to change the definition of an existing range and apply the underlying style to the new cells. This provides a very convenient generalized "style painting" much like the "style paint tool" in the Excel user interface. Of course, the good news is that when a range gets redefined, the new area can be the same width and height or a totally different one : the algorithm which extracts styles from the old range definition can cope with it. For more information, see ranges.
From a programmatic perspective, defining cell boundaries with 4-uples of the form (row1, col1) - (row2, col2) is very convenient because you don't have to convert those into something like Ax:By or RxxCxx:RyyCyy. Not that it's too hard, but it's straight forward to set numerical coordinates. That said, due to customer demand and a better match with existing Excel features, there has been a growing support for boundaries defined by actual ranges, that is not numerically. If you take a look at the API today, you'll probably notice that some objects only use 4-uples, while some others only use ranges, while some allow both. What has been added in the API is the ability to convert boundaries and ranges back and forth to ease working with it going forward. For more information, see ranges.
When you are working with cells, you don't always know what adjacent cells contain. Because xlsgen allows for versatile scenarios including reading and updating cells, you may actually be willing to know the extent of non-empty adjacent cells, especially horizontally and vertically in both directions. Thanks to this, you can start from a cell and figure out how many cells on your right have content until you find a blank. Another feature that works well with this is the ability to know the actual dimensions of the worksheet, that is what is the first actual row, what is the last row, and the same for columns. Combining both provides the necessary elements to use in client code. For more information, see ranges.
If you are running xlsgen under Windows XP, then a good news is that if you intend to deploy the component, you don't need to register it anymore. It's a minor improvement since registering a COM component is not like moving mountains. Nevertheless, occasionally some customers have tried without success to deploy the component in environments where registering a COM component would not even be allowed. Of course, one may want to question if that makes sense at all, when you know that Windows and all Microsoft products itself are heavily baked with COM and that any of their products install tens sometimes hundreds of them. But that's not the question. With XP, Microsoft has introduced a feature called side-by-side which allows one to define in a file the dependencies of an application and force them into the XP dll loader. This file known as a manifest file has a direct effect on the behavior of the operating system whenever a component needs to be loaded, including COM components. With this version, the setup installs a default general purpose manifest file called xlsgen_client.exe.manifest
where xlsgen_client.exe
is the exact name of a fictitious client application. Whenever an application starts on XP, it uses such manifest file (to be renamed), the XP dll loader uses it before it tries to read the registry in order to load COM components. If the COM component is in the same directory than the application, i.e. if the file xlsgen.dll
is in the same directory than the application, then the component is loaded from there without even reading the registry for the actual underlying CLSID, progid and typelib definitions and file indirections. The result of this is that an application can create instances of the COM component without having the COM library use the registry at all. On older operating systems, this optional manifest file is ignored and the registry is used.
Windows XP has introduced a new version of the common controls dll in the system directory which quite changes the look of basic controls such as buttons, edit boxes, and so on. All end-user tools coming with the xlsgen package now embed the XP common controls manifest in order to take advantage of that. This includes the code generator, the search tool and the diff tool. In older operating system versions however, the user interface is left unchanged, but it still works! Of course, not only that but the user interface was intentionally made more modern thanks to a code relying on resizable dialogs instead of default dialogs. The net effect being that the user interface adapts better to the display needs, especially arbitrarily lengthy file paths. The resizable dialogs is not an operating system feature, it's available on all of them.
Another improvement on the end-user tool front is the fact that each file or keyword or check you type or check is now persisted by the application in order to avoid having to re-type or re-check those over and over again.
With this version, Xml becomes a first-class citizen. Any worksheet's content can be exported to Xml. The content exported is restricted to cells. The Xml schema is simple and concise. The Xml export generates a square matrix of cells content with its dimensions in the header. The Xml is concise, each row and column is a one character element. Attributes define the cell data type. Besides this, the encoding is UTF-8 to accomodate both global needs as well as the intrinsic compression provided by UTF-8 over Fix-sized Unicode. You probably want to export a worksheet to Xml in order to have it parse by some other tool possibly not available on Windows, or on the same computer. As of date, xlsgen does not import Xml though. For more information, see here.
CSV, much like Xml, lets you bind the output of Excel content into other tools. CSV has its problems, but is a format well accepted by many popular tools, and is very easy to parse. Which makes it very convenient. The CSV export of a worksheet uses the semi-colon has a cell separator. Any time a semi-colon exists in some cell, it is escaped with double quotes at the beginning and the end of the cell. Whenever there are double quotes characters inside the cell, those are doubled in order to remove any ambiguity. When you export a worksheet as CSV, you can either have the cell content encoded in UTF-8 or simply use the local charset. For internationalization purposes, the UTF-8 encoding is preferred. For more information, see here.
The new row/column objects allow to insert an arbitrary number of rows or columns right in the middle of nowhere. It may look like a non-issue, but it actually is since in a matrix the only way to insert rows or columns is by moving other cells away, and since some cells overlap other cells, this turn out to be stitching art. row/column insertion is long overdue for a general purpose Excel generator. But as just said, the implementation is not trivial. What happens to rows beyond 65536, and what happens to columns beyond 256? They are left stuck in the boundaries. This behavior will be reconsidered if it causes too many non-intuitive behaviors. For more information, see here.
row/column grouping is an evolution of the object model. So far, you would access cells individually, and not even with a Cell object itself. In fact, you would directly use a (row,col) pair in conjunction with the target operator, eg. a Label. Grouping gives you access to an arbitrary group of rows and an arbitrary group of columns. Each group can then be applied a number of methods, like its size. For more information, see here.
row/column autofit is also another long overdue feature. The only way to ensure that an Excel workbook looks well when it's opened is to set rows and columns as auto-fit. When doing so, an algorithm computes the largest width or height and automatically sets the width or height of columns or rows accordingly. Of course, since it's a computation intensive algorithm, it's encouraged not to use this feature in each and every cell of very large workbooks. The bonus of auto-fit is that you never have to bother setting widths or heights in terms of pixels or other units. For more information, see here.
Introspection of cell data types
Reading and updating values in cell has been available for a while, but what was not provided is the built-in discovery of the underlying data types. Each cell has a data type among these : number (integer), float (simple precision), double (double precision), string, time, date, datetime (that is a combination of a date and time). A cell may also have a floating metadata type. Among these are : hyperlink, formula. This lets you act on a much better fine-grained knowledge of the content being manipulated. The API lets you introspect the data type and the metadata type on a per cell basis, while the Xml export automatically attaches the data type to Xml elements. For more information, see here.
Introspection : know if a given cell is part of a merged cell grouping
When you are manipulating cells, it may be important in some scenarios to know if a cell is part of a merged cell grouping, since changing its formatting or value can have weird effects on the look of the overall worksheet. In other words, assuming cells are independent one another is not always a right assumption. For more information, see here.
Introspection : dimensions of a worksheet
There is now built-in dimension properties to query whenever you need to know the exact boundaries of a worksheet. Those properties are updated in real-time so you don't need to be at a particular stage only to query those. Needless to say, having those properties simply cuts the need for row/column iterations. For more information, see here.
Freezing worksheet panes allows to keep a fraction of a worksheet frozen while the rest slides as the user scrolls through it. It is very convenient to keep table headers visible. This option is available in Excel in the Windows menu. You may be willing to unfreeze panes as well. For more information, see here.
Alternatively to freezing worksheet panes, you can also split them into two panes, or four panes. Each pane can then independently be scrolled. In Excel, splitting panes is achieved by dragging the widget at the top of the vertical scrollbar, and the widget at the left of the horizontal scrollbar respectively. You may also want to unsplit panes. For more information, see here
A special regard has been to ensure that Excel files produced by xlsgen, either newly created or from reusing existing Excel files, would be able to open and work properly in OpenOffice. There are a few quirks, due to the fact that OpenOffice is not yet a complete replacement for MS Excel, but these are minor ones. You should feel confident to use OpenOffice, especially when you know that OpenOffice is available on so many more platforms than just Windows.
Functions are added on a customer demand basis. In version 1.8, import time functions have been added. Included are : =HOUR(xxx), =MINUTE(xxx), =SECOND(xxx), =YEAR(xxx), =MONTH(xxx), =DAY(xxx), =NOW(), =TODAY(). For more information, see here.
Formula parenthesis handling improvement
A problem with prior versions of xlsgen is that, while parenthesis were of course not ignored in formulas, they would be removed in the translation process. This could cause problems in Excel at run-time, whether for the computation phase, or whenever somebody would edit the formula only to find out that (s)he had to add the parenthesis again. This bug is fixed.
There has been customer demand in the past for a more comprehensive support of the Page Setup options. Although prior versions support a good share of those options in Excel, some of these were not. Now the print paper size is supported. For instance, "A4", "LETTER" and so on. The full list of supported paper sizes is available here.
In Excel XP and more recent versions, a new worksheet tab color option has been added. xlsgen supports it. This feature degrades nicely in older Excel versions in the sense Excel workbooks can still be opened and the feature is simply ignored. The feature is taken advantage of in the diff tool in order to show with more clarity the changes that have occurred in worksheets, but it's also made available as a general purpose feature. Setting the color of a worksheet tab is as easy as passing an RGB triple. See here for more information.
Development : C++ interface headers
While using the xlsgen object model with C++ is almost as simple as with higher-level more RADish languages like VB, it's not less true that a good reason for that is the existence of smart pointers wrappers automatically generated by importing the xlsgen type library. Now those of us using C++ raw pointers, for a reason of their own, may find it hard or harder to use. The first step consists in extracting the type library from the component, and using the MIDL compiler in order to generate the proxy-stub interfaces headers. These are two files, suffixed _i.h
and _i.c
. There was a documented step-by-step procedure to obtain and use those, but it proved a bit hard in practice. Now the install adds those two files in the application directory, under the C++ interface headers directory. If you are not a C++ programmer, you may want to ignore those.
A new language appears in the supported code generator arsenal : Java. It's not only Java, it's all Java versions out there since the object model uses none of the specificities of 1.x releases. Of course, it's still Windows only since the implementation uses a proxy layer to the COM layer. Java is thus supported in the code generation tool, the drop down has a new member. And there are a few code samples in Java. For more information see here.
Preserve styles in when working with templates
Preserving styles allows to give precedence to existing styles in templates. It is a very handy property in scenarios where you update a template file where some cells were formatted and you simply want to fill them with content, retaining all the formatting. For more information see here.
enumLanguage : a new language supported! gencode_java = 5 enumStyleOption : a new enumeration for style management styleoption_user = 0, styleoption_preserve = 1, enumDataType : a new enumeration for cell data types datatype_notapplicable = 0, datatype_number = 1, datatype_float = 2, datatype_double = 3, datatype_date = 4, datatype_time = 5, datatype_datetime = 6, datatype_string = 7 enumMetadataType : a new enumeration for cell metadata types metadatatype_notapplicable = 0, metadatatype_hyperlink = 1, metadatatype_formula = 2 IXlsEngine interface : one new method HRESULT Diff([in]BSTR excelfilename_older, [in]BSTR excelfilename_newer, [out, retval] IXlsEngineDiff** diff); IXlsEngineDiff interface : a new interface HRESULT AreEqual([out, retval] BOOL* diffresult); HRESULT CountDifferences([out, retval] BOOL* countdifferences); HRESULT GenerateDiffWorkbook([in]BSTR newexcelfilename, [out, retval] IXlsWorkbook** workbook); HRESULT GenerateDiffWorkbookInMemory([in]IUnknown* lockbytes, [out, retval] IXlsWorkbook** workbook); HRESULT GenerateDiffXml([in]BSTR xmlfilename); HRESULT IgnoreWorksheetNames([in]BOOL bIgnore); HRESULT IgnoreWorksheetNames([out, retval]BOOL* bIgnore); HRESULT ExcludeRange([in]int row1, [in]int col1, [in]int row2, [in]int col2); HRESULT ExcludeRangeRef([in]BSTR cellrange); IXlsWorkbook interface : one new property HRESULT StyleOption([out, retval] enumStyleOption* styleOption); HRESULT StyleOption([in]enumStyleOption styleOption); IXlsWorksheet interface : 15 new methods/properties HRESULT Dimensions([out, retval]IXlsWorksheetDimensions** dimensions); HRESULT Export([out, retval]IXlsWorksheetExport** exporter); HRESULT Columns([in]BSTR range, [out, retval]IXlsWorksheetColumns** columns); HRESULT Rows([in]BSTR range, [out, retval]IXlsWorksheetRows** rows); HRESULT CellToRangeR1C1([in]int row, [in]int col, [out, retval]BSTR* cellrange); HRESULT CellToRangeAX([in]int row, [in]int col, [out, retval]BSTR* cellrange); HRESULT AreaToRangeR1C1([in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval]BSTR* cellrange); HRESULT AreaToRangeAXAX([in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval]BSTR* cellrange); HRESULT HorizontalPane([out, retval]IXlsWorksheetPane** pane); HRESULT VerticalPane([out, retval]IXlsWorksheetPane** pane); HRESULT MergedCells([in]int row, [in]int col, [out, retval] IXlsMergedCells** mc); HRESULT CellType([in]int row, [in]int col, [out, retval] enumDataType* datatype); HRESULT CellMetadataType([in]int row, [in]int col, [out, retval] enumMetadataType* datatype); HRESULT TabColor([out, retval] int* nRGB); HRESULT TabColor([in]int nRGB); IXlsWorksheetDimensions : a new interface HRESULT FirstRow([out, retval] int* row); HRESULT LastRow([out, retval] int* row); HRESULT FirstColumn([out, retval] int* col); HRESULT LastColumn([out, retval] int* col); IXlsWorksheetExport : a new interface HRESULT ExportAsCSV([in]BSTR csvfilename, [in]BOOL bUseUTF8Encoding); HRESULT ExportAsXML([in]BSTR xmlfilename, [in]BOOL bExportDatatypes); IXlsWorksheetColumns : a new interface HRESULT Width([out, retval]int* width); HRESULT Width([in]int width); HRESULT AutoFit([out, retval]BOOL* autofit); HRESULT AutoFit([in]BOOL autofit); HRESULT Insert([in]int amountColumns); HRESULT TopExtent([in]int row, [out, retval]int* toprow); HRESULT BottomExtent([in]int row, [out, retval]int* bottomrow); IXlsWorksheetRows : a new interface HRESULT Height([out, retval]int* height); HRESULT Height([in]int height); HRESULT AutoFit([out, retval]BOOL* autofit); HRESULT AutoFit([in]BOOL autofit); HRESULT Insert([in]int amountRows); HRESULT LeftExtent([in]int col, [out, retval]int* leftcol); HRESULT RightExtent([in]int col, [out, retval]int* rightcol); IXlsWorksheetPane : a new interface HRESULT Split([out, retval]BOOL* split); HRESULT Split([in]BOOL split); HRESULT SplitLimit([out, retval]int* rowOrColumn); HRESULT SplitLimit([in]int rowOrColumn); HRESULT FirstVisibleItemAfterSplit([out, retval]int* rowOrColumn); HRESULT FirstVisibleItemAfterSplit([in]int rowOrColumn); HRESULT Freeze([out, retval]BOOL* freeze); HRESULT Freeze([in]BOOL freeze); IXlsRange : 4 new methods/properties HRESULT Top([out, retval]int* row); HRESULT Left([out, retval]int* col); HRESULT Right([out, retval]int* col); HRESULT Bottom([out, retval]int* row); IXlsPageSetup : one new property HRESULT PaperSize([in]BSTR papersize);
What's new in version 1.7 ? (released on June 2005)
Pick lists are a special case of tool among Excel data validation tools. It allows one to assign a special dropdown to a range of cells so that users can select a value among the ones available from the dropdown. Pick lists are covered in more details here.
Duplicating the content of worksheets is the latest worksheet operation added to the API. So far you could create, rename, move, hide, delete worksheets, now you can copy them. When a worksheet is duplicated, you can select where it gets inserted. For more information, see worksheet management.
An Excel file is usually created on the file system. Whether you create a file from scratch or based on an existing file, you still end up creating files. This may not be as convenient under certain circumstances, where write access to the file system is forbidden for instance. To accomodate this, xlsgen now can write the content directly into a memory stream, and then you can either pass the stream over to an application and/or simply dump the stream in a file (as demonstrated in one of the samples). For more information, see in-memory generation.
Support for VB.NET in the reverse engineering tool
While support for VB and VBScript languages already shows how much xlsgen is committed to offering support for popular languages, the addition of VB.NET allows to fuse direct support for your .NET environment other than C#. With earlier versions, you had to take the resulting VB code, and make a few changes in the syntax in order to comply with the syntactic changes between VB and VB.NET. You don't need to do this anymore. Simply start the code generator tool, and drop down the list of available languages.
Protect a worksheet, lock/unlock cells
This Excel feature that wasn't supported so far enables unexpected scenarios. While cells are locked by default, locking is really only activated in Excel if you change the worksheet properties. Once activated, only unlocked cells can be edited. This allows one to pass Excel workbooks to peer and let them fill in info in appropriate cells while leaving everything else intact. xlsgen adds an API at the worksheet level which lets you do just that, activate the worksheet protection, and then each style has an API to let you lock/unlock cells at will. Note that because lock/unlock cell flags are stored in Excel styles rather than cells itself, you may need to create new styles accordingly. For more information, see here.
So far xlsgen only supported the R1C1 notation when it came to creating/reusing ranges and or using ranges in formulas. While the R1C1 notation makes very clear what it targets, there was a demand to support the more natural notation Ax, for instance A3
for a cell or A1:B4
for a range. If you are porting Excel automation code over to xlsgen, or if you are simply used to the Ax notation, then you don't have to worry about this anymore. There is no new method call in the xlsgen object model, just use the range object model like before.
Support for worksheet names in formulas
xlsgen now supports worksheet names cell references and area references in formulas which not only to target the current worksheet but also other worksheets of the same workbook. For instance, you can use Sheet1!A1
. If your worksheet name has spaces, make sure to use apostrophes, as in 'My Worksheet'!A1
.
Support for relative cell references
xlsgen now supports relative cell references. There is nothing to do about it, it's the default now. What's the difference between absolute and relative cell references? If you use an Excel operator to sort columns and rows, then formulas with relative cell references automatically adapt the changes accordingly, while formulas with absolute cell references won't.
While Excel lets one with most freedom in its choice of name when it comes to worksheet names or named ranges, it's actually not entirely true. Worksheet names cannot be larger than 31 characters and several characters are forbidden : * / ? \ [ ] :
. By analogy, but for different reasons, named ranges also don't accept spaces. Whenever you are using those names, xlsgen will throw an exception if you are making a use that is not compatible with the above.
A small change in the page setup is the ability to decide whether gridlines should be printed or not, on a per worksheet basis. For more information, take a look at the IXlsPageSetup interface.
Improvement in the documentation
Any method call or property in the object model now has a help string which explains what it does and most often what to pass in parameters. Those help strings are displayed in your development environment through intellisense or the object browser. In addition, a documentation that aggregates all COM interfaces and methods is available to complement or replace the current documentation. Just like the main CHM based documentation, it has a search option which lets you find methods based on keywords.
More comprehensive support for dates
xlsgen supports date types from the start. Actually there is no such thing as a date type in Excel so using dates is more about understanding how to transpose a date back and forth.
xlsgen supports date types from the start. Actually there is no such thing as a date type in Excel so using dates is more about understanding how to transpose a date back and forth. For that matter, an article is now part of the documentation, and applies to both Excel itself, and xlsgen.
enumLanguage : one new code-generated language gencode_vb = 0, gencode_cplusplus = 1, gencode_csharp = 2, gencode_vbscript = 3, gencode_vbdotnet = 4 IXlsEngine : 2 new methods HRESULT NewInMemory([in]IUnknown* lockbytes, [out, retval] IXlsWorkbook** workbook); HRESULT OpenInMemory([in]BSTR excelfilename, [in]IUnknown* lockbytes, [out, retval] IXlsWorkbook** workbook); IXlsWorksheet : 3 new methods HRESULT NewDataValidation([in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval] IXlsDataValidation** dv); HRESULT Duplicate([in]BSTR newworksheetname, [out, retval] IXlsWorksheet** worksheet); HRESULT LockProperties([out, retval]IXlsWorksheetLockProperties** lockproperties); IXlsWorksheetLockProperties : new interface HRESULT Content([out, retval] BOOL* lock); HRESULT Content([in]BOOL lock); HRESULT Objects([out, retval] BOOL* lock); HRESULT Objects([in]BOOL lock); HRESULT Scenarios([out, retval] BOOL* lock); HRESULT Scenarios([in]BOOL lock); IXlsPageSetup interface : 1 new property HRESULT PrintGridlines([in]BOOL gridlines); HRESULT PrintGridlines([out, retval]BOOL* gridlines); IXlsStyle : 1 new property HRESULT Locked([out, retval] BOOL* locked); HRESULT Locked([in]BOOL locked); IXlsDataValidation : new interface HRESULT AddItem([in]BSTR label);
What's new in version 1.6 ? (released on November 2004)
Support for pictures (jpg, png, wmf, emf, dib)
xlsgen now has a comprehensive support for pictures in Excel workbooks. All major picture types are supported. Each picture is inserted as a blob in the workbook thus you can remove that picture from your hard drive without worrying. Pictures can be accurately positioned in any worksheet using a combination of (row,col) pairs, as well as offsets within the cell, virtually allowing for pixel-precise positioning. For more information, look here.
A flag to know whether a cell stores a formula
Responding to customer feedback, the ability to know whether a given cell stores a formula has been added. This allows introspection within arbitrary Excel workbooks, and is especially useful when you are updating an Excel workbook.
IXlsWorksheet interface, several new properties and methods HRESULT ContainsFormula([in]int row, [in]int col, [out, retval]BOOL* ContainsAFormula); HRESULT Picture([in]BSTR filename, [in]int row1, [in]int col1, [in]int row2, [in]int col2, [in]int topoffset, [in]int leftoffset, [in]int bottomoffset, [in]int rightoffset);
What's new in version 1.5 ? (released on August 2004)
An addition to xlsgen over previous version is the ability to reorder and possibly delete one or more worksheets to satisfy more scenarios. These two are particularly interesting when reading an excel template file in which you want to retain only a fraction of the available worksheets, and you might also want to reorder the worksheets for your needs. This page explains how the features work. For more information, take a look at the new methods available in IXlsWorksheet, the DisplayOrder
and Delete
methods.
Even though the code generator shipped along with xlsgen does indeed access and expose content from cells, some scenarios might require to do just that at run-time without relying on the code generator. For instance, someone might want to extract the current cell value, perform some calculation on it like increment it, and put the value back into the worksheet. Access to cell values allows just that. So far, xlsgen has exposed a few properties at the worksheet level allowing write-access to cell values, including Label
, Number
, Float
, ...Read-access has been added using the same properties to gain access to every possible cell of any existing Excel worksheet, and even a worksheet that is being generated. This page explains how the features work.
Version 1.4 introduced outline as a way to group then expand/collapse a series of cells, whether horizontally or vertically. Unfortunately, so far outline was only available with merged cells, a particular usage that might not suit someone's needs. The new outline object is now a general-purpose outline related feature that allows grouping and then expand/collapse of an arbitrary group of cells, whether vertically, horizontally, or both at the same time. For more information, see the updated outline showcase. Also make sure to take a look at the new IXlsOutline interface. Outlines are created with two new methods available from the current worksheet.
It's now possible to insert page breaks to any worksheet. Page breaks are either vertical or horizontal. Two new methods have been added to the worksheet interface. A page break may not automatically show when opening the Excel workbook : sometimes clicking on the Print preview button is required.
Zoom and default column/row sizes
Several new worksheet properties are accessible, including the ability to define or retrieve the zoom factor, the default column width and the default row height. These properties have been added to the worksheet interface;
IXlsWorksheet interface, several new properties and methods HRESULT DisplayOrder([in]int newindex); HRESULT DisplayOrder([out, retval]int* index); HRESULT Delete(); HRESULT InsertHorizontalPageBreak([in]int row); HRESULT InsertVerticalPageBreak([in]int col); HRESULT NewOutline([in]int row1, [in]int col1, [in]int row2, [in]int col2, [out, retval] IXlsOutline** ot); HRESULT AssignOutline([in]IXlsOutline* ot); HRESULT DefaultColWidth([in]int colwidth); HRESULT DefaultColWidth([out, retval]int* colwidth); HRESULT DefaultRowHeight([in]int pixels); HRESULT DefaultRowHeight([out, retval]int* pixels); HRESULT Zoom([in]int percent); HRESULT Zoom([out, retval]int* percent); IXlsOutline, new object HRESULT Label([in]BSTR label); HRESULT Number([in]int n); HRESULT Float([in]double f); HRESULT Formula([in]BSTR formula); HRESULT RichLabel([in]IXlsRichLabel* rl); HRESULT Hyperlink([in]IXlsHyperlink* rl); HRESULT HorizontalOutlineLevel([out, retval]enumOutlineLevel* outline); HRESULT HorizontalOutlineLevel([in]enumOutlineLevel outline); HRESULT HorizontalOutlineExpand([out, retval]BOOL* expanded); HRESULT HorizontalOutlineExpand([in]BOOL expanded); HRESULT VerticalOutlineLevel([out, retval]enumOutlineLevel* outline); HRESULT VerticalOutlineLevel([in]enumOutlineLevel outline); HRESULT VerticalOutlineExpand([out, retval]BOOL* expanded); HRESULT VerticalOutlineExpand([in]BOOL expanded);
What's new in version 1.4 ? (released on July 2004)
Excel ranges are a great addition to xlsgen. Combining ranges and styles allows the decoupling of data in worksheets and formatting, which allows for far less code to generate the same content than using previous xlsgen releases. For more information, see ranges.
With this xlsgen release, strings in worksheets are now automatically factorized to save space. This is particularly effective when generating content from data organized like SQL joins where many records are partial duplicates. The factorized strings
option can be turned off. For more information, see IXlsWorkbook.
Page setup properties can be defined. Properties are the print area for each worksheet (actually a special case of range), portrait versus landscape layout, scaling, fit to width/height, margins, and the header and footer for each worksheet. These properties allow a better anticipation of Excel workbooks printing. For more information, see IXlsPageSetup.
API additions in version 1.4 include :
IXlsWorkbook interface, one new property HRESULT FactorizedStringsMode([out, retval] BOOL* bFactorizedStringsMode); IXlsWorksheet interface, several new properties and methods HRESULT NewRange([in]BSTR cellrange, [out, retval]IXlsRange** range); HRESULT Range([in]BSTR name, [out, retval] IXlsRange** range); HRESULT PageSetup([out, retval] IXlsPageSetup** pagesetup); HRESULT Selected([in]BOOL selected); HRESULT Hidden([in]BOOL hidden); Select([in]int row1, [in]int col1, [in]int row2, [in]int col2); HRESULT Name([in]BSTR worksheetname); IXlsRange, a new interface interface IXlsRange { HRESULT Style([out, retval] IXlsStyle** style); HRESULT AddSubRange([in]BSTR cellrange); HRESULT AddCellsRange([in]int row1, [in]int col1, [in]int row2, [in]int col2); HRESULT Range([out, retval] BSTR* cellrange); HRESULT Range([in] BSTR cellrange); HRESULT Name([out, retval] BSTR* name); HRESULT Name([in] BSTR name); HRESULT Apply(); } IXlsPageSetup, a new interface interface IXlsPageSetup { HRESULT PrintArea([in]BSTR cellrange); HRESULT SetMargins([in]double left, [in]double top, [in]double right, [in]double bottom, [in]double header, [in]double footer); HRESULT PageOrientation([in]BOOL portrait); HRESULT Scale([in]int scale); HRESULT SetFitWidth([in]int width, [in]int height); HRESULT PageHeader([in]BSTR docheader); HRESULT PageFooter([in]BSTR docfooter); } IXlsBorders, two new borders, and common border property accessors HRESULT MidHorizontal([out, retval] IXlsBorder** border); HRESULT MidVertical([out, retval] IXlsBorder** border); HRESULT Style([in]enumBorderStyle style); HRESULT Color([in]int nRGB);
What's new in version 1.3 ? (released on June 2004)
The Excel search tool is a versatile and blazingly fast keyword searcher within Excel workbooks. It can find keywords based on some options (including wildcards, which is much like Windows Explorer) across Excel workbooks. Excel workbooks that will be looked up include Excel 95, Excel 97, Excel 2000, Excel XP and Excel 2003. The Excel search tool is a separate tool based on the search API exposed by xlsgen. Results can be double-clicked to open the matches in Excel workbooks in an accurate manner : the worksheets are positioned onto the cell matches. Results can also be exported to a flat file for further analysis. For more information on how to use this new tool, see here. For more information on the API interface, see here.
Hyperlinks provide report-to-report linking and more to Excel workbooks. Hyperlinks are natively supported in Excel, and now generated by xlsgen. Hyperlinks can be simple urls, or local files or existing Excel workbooks. When targeting Excel workbooks, cell references and named ranges are supported in such a way that it is possible to provide appealing navigation scenarios and enrich your Excel workbooks with exciting capabilities. For more information on hyperlinks, see here.
Outline in Excel is the ability to group blocks of cells so that they can be expanded or collapsed on demand. Outline guts appear on the side of Excel worksheets, either on the left or on the top. Options provided as part of the outline API interface is the ability to choose the nesting level of outline, as well as the default expanded/collapsed state. For more information on outline, see here.
ASP VBScript as a language addition to the code generator
Because the code generator produces Visual Basic with early-automation patterns, it has become useful to produce code in late-automation languages like VBScript. In addition, VBScript is the default and most widely used language in ASP web design scenarios. Automatically generating ASP VBScript code from an existing Excel workbook enables new server-side scenarios that range from simple presentation, customization to much more advanced data analysis.
API changes in version 1.3 include :
in languages supported by the code generator, addition of ASP VBScript typedef enum { gencode_vb=0, gencode_cplusplus=1, gencode_csharp=2, gencode_vbscript=3 } enumLanguage; outline support typedef enum { outline_level0 = 0, outline_level1 = 1, outline_level2 = 2, outline_level3 = 3, outline_level4 = 4, outline_level5 = 5, outline_level6 = 6, outline_level7 = 7 } enumOutlineLevel; IXlsEngine interface, one new method HRESULT Search([in]BSTR excelfilename, [out, retval] IXlsSearch** search); IXlsWorksheet interface, two new methods HRESULT NewHyperlink([out, retval] IXlsHyperlink** hlink); HRESULT Hyperlink([in]int row, [in]int col, [in]IXlsHyperlink* hlink); IXlsHyperlink, a whole new interface interface IXlsHyperlink { HRESULT Label([in]BSTR label); HRESULT FileTarget([in]BSTR filename); HRESULT UrlTarget([in]BSTR url); HRESULT CellAnchor([in]BSTR sheetname, [in]int row, [in]int col); HRESULT NamedAnchor([in]BSTR name); HRESULT RenderAsHyperlink([in]BOOL renderingstyle); HRESULT RelativeFilepath([in]BOOL relativefilepath); } IXlsSearch, a whole new interface interface IXlsSearch { HRESULT Options([out, retval]IXlsSearchOptions** options); HRESULT SearchKeyword([in]BSTR keyword, [out, retval]IXlsSearchResults** results); } IXlsSearchOptions, a whole new interface interface IXlsSearchOptions { HRESULT CaseSensitive([in]BOOL casesensitive); HRESULT CaseSensitive([out, retval]BOOL* casesensitive); HRESULT RemoveDuplicates([in]BOOL removeduplicates); HRESULT RemoveDuplicates([out, retval]BOOL* removeduplicates); HRESULT UsesWildcards([in]BOOL useswildcards); HRESULT UsesWildcards([out, retval]BOOL* useswildcards); } IXlsSearchResults, a whole new interface interface IXlsSearchResults { HRESULT WorksheetCount([out, retval]long* results); HRESULT WorksheetItem([in]int i, [out, retval]IXlsSearchWorksheetResult** result); HRESULT Export([in]BSTR filename); } IXlsSearchWorksheetResult, a whole new interface interface IXlsSearchWorksheetResult { HRESULT Name([out, retval]BSTR* worksheetname); HRESULT Count([out, retval]long* results); HRESULT Item([in]int i, [out, retval]IXlsSearchResult** result); } IXlsSearchResult, a whole new interface interface IXlsSearchResult { HRESULT Row([out, retval]int* row); HRESULT Col([out, retval]int* col); } IXlsMergedCells interface, one new method and 2 new properties HRESULT Hyperlink([in]IXlsHyperlink* rl); HRESULT OutlineLevel([out, retval]enumOutlineLevel* outline); HRESULT OutlineLevel([in]enumOutlineLevel outline); HRESULT OutlineExpand([out, retval]BOOL* expanded); HRESULT OutlineExpand([in]BOOL expanded);
The enumLanguage
now supports one more language, ASP VBScript, which simplifies using xlsgen in server-side scenarios. The new enumOutlineLevel
enumeration allows to define the outline level of blocks of cells, typically merged cells. You can access outlining in Excel by grouping rows or columns with the Data / group menu.
The Search
method lets anyone search arbitrary Excel workbooks (Excel 95, 97, 2000, XP, 2003) for keywords. Based on one or more keywords and search options, this method produces result pages.
The NewHyperLink
and Hyperlink
methods respectively let anyone create flexible hyperlinks and attach them to any worksheet cell.
The IXlsHyperlink
interface lets anyone define an hyperlink with a broad range of capabilities. Hyperlinks can be either simple urls, with or without anchors, or local files, or Excel workbooks with or without a cell target or a named range target. Intra hyperlinks, links inside the same workbook, are also supported.
The IXlsSearch
interface lets anyone define a search process with one or more keywords and one or more options.
The IXlsSearchOptions
interface sets the search options, among which the ability to disable case sensitiveness, to avoid more than one result per worksheet, and to use wildcards like *.
The IXlsSearchResults
interface represents results from a search process and let anyone either retrieve results on a worksheet by worksheet basis, or just export the results into a flat file.
The IXlsSearchWorksheetResult
interface brings all result for the current worksheet of the current workbook. It lets a client application filter out results based on some application logic.
The IXlsSearchResult
interface brings the definition for any cell match. Worksheet names are also match candidates.
The Hyperlink
method in the IXlsMergedCells
interface attaches a previously defined hyperlink to a merged cells block.
The two OutlineLevel
and OutlineExpand
tell whether the merged cells block should be associated to outlining either on the left of the worksheet, or on the top, and whether the outline should be expanded or not.
What's new in version 1.2 ? (released on April 2004)
code generator
Code generator is a fantastic tool that lets you automatically generate the code that will produce an Excel existing workbook. A useful scenario is to use Excel interactively to format a report, then use the code generator to see all the xlsgen-compliant code for it. This reduces the time to automate your report generation. For more information, see code generator.
API changes in version 1.2 include :
typedef enum { gencode_vb=0, gencode_cplusplus=1, gencode_csharp=2 } enumLanguage; IXlsEngine interface, a new method is added HRESULT GenerateCode([in]BSTR excelfilename, [in]BSTR txtfilename, [in]enumLanguage language); IXlsWorksheet interface, 3 new properties are added [propput] HRESULT MultipleColWidth([in]int colstart, [in]int colend, [in]int width); [propput] HRESULT MultipleRowHeight([in]int rowstart, [in]int rowend, [in]int height); [propput] HRESULT DefaultStyle([in]int index); IXlsRichLabel interface, 1 new method HRESULT LabelWithDefaultStyle([in]BSTR label, [in]int styleindex);
The GenerateCode
method is the programmatic interface for the code generation tool.
The MultipleColWidth
and MultipleRowHeight
properties define the width or the height of multiple columns or rows with a single statement. These properties are useful for both the forward and reverse generation used in xlsgen.
The two remaining properties are useful for the reverse generation and not will probably not be used intentionally by xlsgen programmers.
What's new in version 1.1 ? (released on March 2004)
read a template Excel file
It's the ability to reuse existing Excel workbooks. Thanks to it, Excel workbooks don't have to be generated from scratch anymore.
multi-threading support
Multi-threading provides the ability to create multiple Excel workbooks simultaneously. This is a great addition to version 1.0, especially when it comes to mission-critical and robust server-side generation. Thanks to this, it is not anymore required to host each xlsgen instance in separate processes.
API changes in version 1.1 include :
IXlsEngine interface, a new method is added HRESULT Open([in]BSTR excelfilename, [in]BSTR newexcelfilename, [out, retval] IXlsWorkbook** workbook); IXlsWorkbook interface, 3 new properties are added [propget] HRESULT WorksheetCount([out, retval] int* count); [propget] HRESULT WorksheetByIndex([in]int index, [out, retval] IXlsWorksheet** worksheet); [propget] HRESULT WorksheetByName([in]BSTR name, [out, retval] IXlsWorksheet** worksheet); IXlsWorksheet interface, one new property is added [propget] HRESULT StyleFromLocation([in]int row, [in]int col, [out, retval] IXlsStyle** style);
The Open
method lets you open an existing Excel workbook and reuse its content, tables, charts, pivots and macros as templates. Very powerful method. Fore more information, see here.
The Worksheet
-related properties let you get an existing worksheet and start working on it. This property is useful whenever, for instance, you want to say add content to the first sheet of a 3-sheet workbook. Those properties expose existing Excel worksheets as templates.
The Style
property lets you query a style object at an arbitrary (row, column) coordinate of an existing worksheet, letting you reuse styles. Reusing styles cuts down the burden of creating your own from scratch, and saves time. The style object in turn has many readable properties and exposes the number formatting, font, alignment, borders and fill pattern. This property exposes existing Excel styles as templates.
What's in version 1.0 ? (released on December 2003)