Commit Graph

246 Commits

Author SHA1 Message Date
xuri 40ed1d1b81
Fix potential file corrupted when changing cell value or the col/row
- Remove shared formula subsequent cell when setting the cell values
- Support adjust table range when removing and inserting column/row
2022-07-16 12:50:40 +08:00
MJacred 6429588e14
adjust `ErrColumnNumber`, rename `TotalColumns` to `MaxColumns` and add new constant `MinColumns` (#1272)
Signed-off-by: Benjamin Lösch <loesch.benny92@gmx.de>
2022-07-14 23:36:43 +08:00
Eagle Xiang 1dbed64f10
This closes #1269, made the `NewStreamWriter` function case insensitive to worksheet name
Co-authored-by: xiangyz <xiangyz@dustess.com>
2022-07-06 20:39:10 +08:00
xuri 852f211970
This closes #1257, fix incorrect worksheet header footer fields order 2022-06-21 20:08:47 +08:00
Eng Zer Jun 6bcf5e4ede
refactor: replace strings.Replace with strings.ReplaceAll (#1250)
strings.ReplaceAll(s, old, new) is a wrapper function for
strings.Replace(s, old, new, -1). But strings.ReplaceAll is more
readable and removes the hardcoded -1.

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2022-06-12 00:19:12 +08:00
xuri 1c167b96a3
Improves the calculation engine, docs update, and adds the dependabot
- Initialize array formula support for the formula calculation engine
- Update example and unit test of `AddPivotTable`
- Update the supported hash algorithm of ProtectSheet
2022-05-26 00:15:28 +08:00
xuri afb2d27c90
This fix formula calculation accuracy issue and panic when set pane
- Fix `GROWTH` and `TREND` calculation accuracy issue
- Fix panic when add pane on empty sheet views worksheet
- New exported constants `MinFontSize`
2022-05-23 13:02:11 +08:00
xuri 0c3fd0223c
This closes #1225, allowing insert EMF format images 2022-05-13 01:03:40 +08:00
xuri 8a335225c7
Format code, update documentation and remove exported variable `XMLHeaderByte` 2022-03-24 00:19:30 +08:00
xuri f0cb29cf66
This closes #1162, improve the compatibility with alternate content
Preserve alternate content in the workbook, worksheet, and drawingML
2022-03-05 14:48:34 +08:00
xuri f87c39c41d
This closes #1148, resolve limitations when adding VBA project to the workbook
Added two exported functions `SetWorkbookPrOptions` and `GetWorkbookPrOptions` to support setting and getting the code name property of the workbook
Re-order fields of the workbook properties group to improve the compatibility
Go Modules dependencies upgrade
Put workbook related operating in new `workbook.go` source code
Library introduction docs block updated
2022-02-17 00:09:11 +08:00
xuri 3ee3c38f9c
Fix file corrupted in some cases, check file extension and format code
Fix file corrupted when save as in XLAM / XLSM / XLTM / XLTX extension in some case
New exported error ErrWorkbookExt has been added, and check file extension on save the workbook
Format source code with `gofumpt`
2022-01-23 00:48:26 +08:00
xuri b96329cc88
Breaking change for data validation and fixed #1117
- Remove second useless parameter `isCurrentSheet` of the function `SetSqrefDropList`
- Fix missing page setup of worksheet after re-saving the spreadsheet
2022-01-12 00:18:15 +08:00
xuri 2245fccca0
Typo fix, rename exported constants, dependencies modules and copyright update
Rename exported constants `NameSpaceDublinCoreMetadataIntiative` to `NameSpaceDublinCoreMetadataInitiative`
2022-01-09 00:20:42 +08:00
Jonham.Chen af5c4d00e8
feat: implement SHA-512 algorithm to ProtectSheet (#1115) 2022-01-08 10:32:13 +08:00
xuri 89b85934f6
This closes #1096, memory usage optimization and another 4 changes
- Unzip shared string table to system temporary file when large inner XML, reduce memory usage about 70%
- Remove unnecessary exported variable `XMLHeader`, we can using `encoding/xml` package's `xml.Header` instead of it
- Using constant instead of inline text for default XML path
- Rename exported option field `WorksheetUnzipMemLimit` to `UnzipXMLSizeLimit`
- Unit test and documentation updated
2021-12-27 23:49:28 +08:00
xuri 577a07f08c
Simplify code and update unit test
Improve unit test coverage for the functions: `NewStyle`, `SetActiveSheet`, `SearchSheet` and `deleteAndAdjustDefinedNames`
Simplify code and add comments for the function: `deleteAndAdjustDefinedNames`
2021-12-03 00:19:11 +08:00
Michael Wiesenbauer aa359f1c74
refactor DeleteSheet for better readability (#1078)
Signed-off-by: Michael Wiesenbauer <michael.wiesenbauer@ambos.io>
Co-authored-by: Michael Wiesenbauer <michael.wiesenbauer@fau.de>
2021-12-02 22:14:57 +08:00
xuri 6b277c61d2
Fix sheet deletion fail in some case 2021-11-18 08:06:14 +08:00
xuri bc3c7d51a2
ref #65: new formula function PRICE
- fix COUPPCD result accuracy issue
- update close spreadsheet example in documentation and README
2021-11-17 00:25:36 +08:00
xuri bda8e7f812
This closes #1061, support multi-byte language on set header footer
typo fixed and simplify code for read the data values arguments of formula functions
2021-11-16 00:40:44 +08:00
xuri 57275db22e
This closes #1057, merge column styles to reduce spreadsheet size 2021-11-14 00:17:31 +08:00
Sean Liang 32548a6cac
return immediately when matched for efficiency (#1049) 2021-11-03 15:13:46 +08:00
xuri 790c363cce This closes #833, closes #845, and closes #1022, breaking changes
- Close spreadsheet and row's iterator required
- New options `WorksheetUnzipMemLimit` have been added
- Improve streaming reading performance, memory usage decrease about 93.7%
2021-09-19 11:06:54 +08:00
xuri 32b23ef42d
This closes #998
- Support text comparison in the formula, also ref #65
- `GetCellValue`, `GetRows`, `GetCols`, `Rows` and `Cols` support to specify read cell with raw value, ref #621
- Add missing properties for the cell formula
- Update the unit test for the `CalcCellValue`
2021-09-05 11:59:50 +08:00
xuri 48c16de8bf
Improve security and simplify code
- Make variable name more semantic
- Reduce cyclomatic complexities for the formula calculate function
- Support specified unzip size limit on open file options, avoid zip bombs vulnerability attack
- Typo fix for documentation and error message
2021-08-15 00:06:40 +08:00
three f6f14f507e
Speed up merge cells 2021-08-13 01:32:44 +08:00
xuri 7dbf88f221
This closes #971, closes #972 and closes #974
- Escape XML character in the drop list
- Fix incorrect character count limit in the drop list
- Fix Excel time parse issue in some case
- Fix custom number format month parse issue in some case
- Fix corrupted file generated caused by concurrency adding pictures
2021-07-29 00:03:57 +08:00
xuri 5ce3fe8cb8
Improvement compatibility with invalid first-page number attribute in the page layout 2021-07-21 23:24:49 +08:00
xuri fbcfdeae90
This closes #879, fix delete defined name failed in some case 2021-07-15 23:24:01 +08:00
xuri b14b74bf56
This closes #873, make the sheet names are not case sensitive for `NewSheet`, `GetSheetIndex`, `DeleteSheet` 2021-07-10 23:47:35 +08:00
xuri 90d200a10b
Make the functions `SetSheetRow`, `New Style` and `SetCellStyle` concurrency safety 2021-07-07 00:57:43 +08:00
xuri b7fece5173
Support concurrency add picture 2021-07-06 00:31:04 +08:00
xuri 544ef18a8c
- Support concurrency iterate rows and columns
- Rename exported field `File.XLSX` to `File.Pkg`
- Exported error message
2021-07-05 00:03:56 +08:00
xuri 0e02329bed
This closes #861, support concurrency get cell picture and remove unused internal function `getSheetNameByID` 2021-07-04 12:13:06 +08:00
vettich 5ec61310dc
fix: LocalSheetID in DefinedName should be equal to SheetIndex instead of SheetID (#868) 2021-07-03 14:13:26 +08:00
xuri be12cc27f1
This closes #652, new SetColWidth API, support set column width in stream writing mode, and export error message 2021-05-10 00:09:24 +08:00
xuri 0e0237e62d
compatibility with non-standard page setup attributes 2021-05-07 23:08:58 +08:00
xuri 438fd4b3f9
This closes #834, fix invalid file path and duplicate namespace when re-creating worksheet 2021-05-06 22:09:12 +08:00
xuri f8f699a172
Go 1.15 and later required, #65 fn: IMABS, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMEXP, IMLN and IMLOG10 2021-04-04 15:29:43 +08:00
xuri 2af96c0714
#65 fn: N, PERCENTILE.INC and T
typo fixed
2021-03-30 23:02:22 +08:00
David d08a6d2437
updated SetDefinedName's localSheetId attr to use sheetIndex
Excelize 2.3.2 OUT:

```
<sheets>
        <sheet name="Q-P-QP-11" sheetId="55" r:id="rId1"/>
        <sheet name="Q-P-QP-12" sheetId="53" r:id="rId2"/>
        <sheet name="Q-P-QP-13" sheetId="54" r:id="rId3"/>
        <sheet name="Q-P-RN-12" sheetId="56" r:id="rId4"/>
        <sheet name="Q-P-RN-13" sheetId="57" r:id="rId5"/>
        <sheet name="C-C-QP-11-12-13-RN-12-13" sheetId="50" r:id="rId6"/>
        <sheet name="E-T-QP-11-12-13" sheetId="31" r:id="rId7"/>
        <sheet name="E-T-BK" sheetId="60" r:id="rId8"/>
        <sheet name="E-A-RN-12-13" sheetId="43" r:id="rId9"/>
        <sheet name="F1-A-QP-11-12-13" sheetId="1" r:id="rId10"/>
        <sheet name="F2-A-QP-11-12-13" sheetId="23" r:id="rId11"/>
        <sheet name="C-A-QP-12-13-RN-12-13" sheetId="48" r:id="rId12"/>
        <sheet name="C-T-QP-12-13" sheetId="7" r:id="rId13"/>
        <sheet name="R-T-QP-12-RN-12-13" sheetId="45" r:id="rId14"/>
        <sheet name="C-T-QP-11" sheetId="58" r:id="rId15"/>
        <sheet name="R-T-QP-11" sheetId="3" r:id="rId16"/>
        <sheet name="A-T-QP-11-12-RN-12" sheetId="13" r:id="rId17"/>
        <sheet name="A2-T-RN-13" sheetId="42" r:id="rId18"/>
        <sheet name="ap-T-QP-11" sheetId="59" r:id="rId19"/>
        <sheet name="B-A-QP-12-13" sheetId="32" r:id="rId20"/>
        <sheet name="B-A-QP-11" sheetId="33" r:id="rId21"/>
    </sheets>
    <definedNames>
        <definedName localSheetId="58" name="_xlnm.Print_Titles">ap-T-QP-11!$2:$5</definedName>
        <definedName localSheetId="2" name="_xlnm.Print_Titles">R-T-QP-11!$2:$13</definedName>
    </definedNames>
```

MS Excel 2010 out

```
<sheets>
        <sheet name="Q-P-QP-11" sheetId="55" r:id="rId1"/>
        <sheet name="Q-P-QP-12" sheetId="53" r:id="rId2"/>
        <sheet name="Q-P-QP-13" sheetId="54" r:id="rId3"/>
        <sheet name="Q-P-RN-12" sheetId="56" r:id="rId4"/>
        <sheet name="Q-P-RN-13" sheetId="57" r:id="rId5"/>
        <sheet name="C-C-QP-11-12-13-RN-12-13" sheetId="50" r:id="rId6"/>
        <sheet name="E-T-QP-11-12-13" sheetId="31" r:id="rId7"/>
        <sheet name="E-T-BK" sheetId="60" r:id="rId8"/>
        <sheet name="E-A-RN-12-13" sheetId="43" r:id="rId9"/>
        <sheet name="F1-A-QP-11-12-13" sheetId="1" r:id="rId10"/>
        <sheet name="F2-A-QP-11-12-13" sheetId="23" r:id="rId11"/>
        <sheet name="C-A-QP-12-13-RN-12-13" sheetId="48" r:id="rId12"/>
        <sheet name="C-T-QP-12-13" sheetId="7" r:id="rId13"/>
        <sheet name="R-T-QP-12-RN-12-13" sheetId="45" r:id="rId14"/>
        <sheet name="C-T-QP-11" sheetId="58" r:id="rId15"/>
        <sheet name="R-T-QP-11" sheetId="3" r:id="rId16"/>
        <sheet name="A-T-QP-11-12-RN-12" sheetId="13" r:id="rId17"/>
        <sheet name="A2-T-RN-13" sheetId="42" r:id="rId18"/>
        <sheet name="ap-T-QP-11" sheetId="59" r:id="rId19"/>
        <sheet name="B-A-QP-12-13" sheetId="32" r:id="rId20"/>
        <sheet name="B-A-QP-11" sheetId="33" r:id="rId21"/>
    </sheets>
    <definedNames>
        <definedName name="_xlnm.Print_Titles" localSheetId="18">'ap-T-QP-11'!$2:$5</definedName>
        <definedName name="_xlnm.Print_Titles" localSheetId="15">'R-T-QP-11'!$2:$13</definedName>
    </definedNames>
```


Compare localSheetId it uses sheet index instead of sheet's sheetId
2021-03-21 19:39:36 -04:00
xuri afe2ebc261 This improves compatibility for absolute XML path, Windows-style directory separator and inline namespace; 2021-02-27 08:49:10 +08:00
xuri d84050921e
check empty rich text run properties; new formula fn: LEFT, LEFTB, RIGHT, RIGHTB 2021-02-23 00:05:19 +08:00
xuri 36b7990d6b
lint issue fixed and new formula function: ATAN, AVERAGE, AVERAGEA, CONCAT, CONCATENATE, COUNT, COUNTBLANK, MAX 2021-02-15 00:09:35 +08:00
xuri 3648335d7f This improves compatibility for worksheet relative XML path and multi rules auto filter 2021-02-11 10:54:38 +08:00
xuri 30549c5e90
fix custom row height check issue 2021-02-08 18:05:15 +08:00
xuri 1f329e8f96
This closes #774, closes #775 and closes #776
- correct adjust calculation chain in duplicate rows
- correct adjust defined name in the workbook when delete worksheet
- use absolute reference in the auto filters defined name to make it compatible with OpenOffice
- API `CoordinatesToCellName` have a new optional param to specify if using an absolute reference format
- Fix cyclomatic complexity issue of internal function `newFills` and `parseToken`
2021-02-02 22:23:16 +08:00
xuri 1bc5302007
Fixed #764, add a condition for round precision 2021-01-20 00:14:21 +08:00
xuri b260485f29
support to set print black and white and specified the first printed page number 2021-01-17 01:06:08 +08:00
xuri 054bb9f061
Support to adjust print scaling of the worksheet 2021-01-16 21:51:23 +08:00
xuri 13e0ed2a69
Fixed #735, refresh active tab after delete sheet 2020-11-23 00:01:06 +08:00
xuri 2514bb16c6 Fix #724, standardize variable naming and update unit tests 2020-11-11 01:03:56 +08:00
xuri 5dd0b4aec2
using POSIX directory separator in zip path with Windows 2020-11-06 20:03:13 +08:00
xuri c82a185af8
Compatibility improvement: parse document core part (workbook) dynamically 2020-11-04 00:28:20 +08:00
Ted fcca8a3838
optimize memory allocation (#722)
* optimize marshal

* optimize mem alloc

* add benchmark testing

* add NewSheetWithRowNum testing

* sync struct fields order

* add BenchmarkNewSheetWithStreamWriter

* delete NewSheetWithRowNum and benchmark test
2020-11-03 17:48:37 +08:00
xuri b812e9a1a8
New formula function AND (#701) and update doc for the NewSheet (#714) 2020-10-22 08:29:25 +08:00
xuri 4834a058aa
This closes #714 and closes #715, fix wrong worksheet index returned by NewSheet in some case, fix panic on formatted value with no built-in number format ID 2020-10-19 23:55:54 +08:00
xuri 520aa679f3
Fix #706, #713 improve AddPicture performance, fix missing worksheet when rename with same names 2020-10-18 00:01:33 +08:00
xuri ac3dce0bea
- Resolve #711, update docs for the GetSheetIndex
- Update unit test
2020-10-12 00:05:27 +08:00
xuri 88de2f8d51
Default row height compatibility with Apache OpenOffice and Kingsoft WPS, unit test update and typo fixed 2020-08-22 18:58:43 +08:00
xuri 843bd24e56 This closes #677 and closes #679, fix panic when enabling compiler inline flags 2020-08-06 05:58:40 +00:00
xuri c922c32fb7
support parse and generate XML element namespace dynamic, fix #651 2020-07-18 15:15:16 +08:00
jaby 5993a07422
Fix issue 665 (#666) 2020-07-14 23:05:43 +08:00
xuri 49257c5918
support case-sensitive doc parts to improve compatibility 2020-07-09 01:24:11 +08:00
xuri 15fd56853f
Update docs and typo fixed 2020-06-22 00:14:56 +08:00
xuri dfea8f96ed
- New API: SetSheetFormatPr and GetSheetFormatPr
- typo fix, resolve #635
2020-05-12 23:26:26 +08:00
xuri 48fc4c08a2
init formula calculation engine, ref #65 and #599 2020-05-03 18:44:43 +08:00
xuri 2285d4dc71
handle the cell without r attribute in a row element 2020-04-24 08:26:16 +08:00
xuri 1fe660df64
- Resolve #485 use sheet index instead of ID
-  added 3 internal function: getSheetID, getActiveSheetID, getSheetNameByID
2020-04-23 02:01:14 +08:00
xuri 0f2a905324 Performance improvements 2020-04-05 13:51:00 +08:00
xuri 3f89c6e979
remove ineffectual variable assignments and simplify code 2020-03-29 18:44:24 +08:00
xuri 6afc468a02
Resolve #451, support create chart sheet 2020-03-28 23:47:26 +08:00
xuri 1d87da57ec
Resolve #492, init support for insert and remove page break 2020-03-01 00:34:41 +08:00
xuri ad883caa0f
Resolve #580, revert commit 5ca7231ed4 2020-02-19 00:08:10 +08:00
xuri e51aff2d95 Resolve #570, flat columns for the column's operation 2020-02-07 00:53:38 +08:00
xuri 5ca7231ed4
optimize code and comments: use println errors instead of panic 2020-01-03 23:57:25 +08:00
xuri 09485b3f9f
Improve code coverage unit tests 2019-12-29 16:02:31 +08:00
xuri 4e4a5b9b3e
Improve compatibility, fix workbook's rels ID calc error 2019-12-23 00:07:40 +08:00
xuri ae2865d923
Improve code coverage unit tests 2019-12-22 00:02:09 +08:00
match-meng 7358dca436 Update comments for the xmlNewDecoder (#542) 2019-12-20 22:22:56 +08:00
xuri 4249dad8ea
Resolve #539 Merge branch 'v2'
# Conflicts:
#	rows.go
#	sheet.go
2019-12-20 01:00:15 +08:00
Alex Geer b1b3c0d151 Fix #539 Fixed error opening excel file created in encoding d… (#540)
* Fixed issue #539 Fixed error opening excel file created in encoding different from UTF-8, added logging of possible errors when decoding XML if the function does not provide exit with an error

* Added test for CharsetReader

* Fixed #discussion_r359397878

Discussion: https://github.com/360EntSecGroup-Skylar/excelize/pull/540#discussion_r359397878

* Fixed go fmt

* go mod tidy and removed unused imports

* The code has been refactored
2019-12-20 00:30:48 +08:00
xuri a526e90404
Fix #426, handle empty workbook view 2019-12-16 08:32:04 +08:00
xuri 402ad2f62b
Update XML namespace 2019-11-30 00:06:36 +08:00
xuri 8d6e431dcd
Resolve #521, fix missing elements when parsing 2019-11-28 21:53:50 +08:00
xuri 7965e1231b
Resolve #146, make the GetRow function read data as streaming. Ref: #382, #515 2019-11-23 04:13:59 +08:00
Harris bf9a835549
Reduce allocations when writing
Fix #494

If a row is full, don't bother allocating a new one, just return it.

Use the last populated row as a hint for the size of new rows.

Simplify checkSheet to remove row map
2019-11-05 08:18:11 -06:00
xuri 5e418ebd66
Resolve #507, add the new function `DeleteDefinedName` 2019-10-26 20:55:24 +08:00
xuri e7581ebf3e
Fix corrupted Excel file issue #413 2019-10-23 10:08:29 +08:00
xuri 2e791fa433 Optimize code of Getting/Setting Page Margins 2019-10-17 00:02:39 +08:00
streboryaj 2d21b5b50f Added accessors for Getting/Setting Page Margins (#497)
* Added accessors for Getting/Setting Page Margins

* Added test cases
2019-10-15 22:26:08 +08:00
xuri 8922f65978
Combine functions:
workBookRelsWriter, drawingRelsWriter into relsWriter;
drawingRelsReader, workbookRelsReader, workSheetRelsReader into relsReader;
addDrawingRelationships, addSheetRelationships into addRels
2019-09-16 01:17:35 +08:00
xuri 9c70d0ac86
Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
Harris faaaa52cb8
Get sheet names based on index
SheetID only seems to indicate the file name for the sheet.
Check the sheets list based on index instead. Reordering sheets
in Excel changes the order they appear in that list.

Fixes #457
2019-08-08 08:19:18 -05:00
xuri cbe919fdf6
New feature: sparkline supported 2019-08-04 20:24:59 +08:00
xuri b5f7d4a78e
Merge pull request #447 from dongkai16z/master
Fix #443
2019-07-26 09:21:25 +08:00
Sustainedhhh 0c9e5137e3
Fix #442 2019-07-25 20:31:21 +08:00
董凯 53e653f28e
Fix #443 2019-07-25 20:27:03 +08:00
xuri e14d2febc8
Resolve #432, supplement the function of SetPageLayout
SetPageLayout support to set fit to width and height
2019-07-06 15:11:51 +08:00