react-native-nitro-xlsx 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +73 -0
  3. package/NitroXlsx.podspec +110 -0
  4. package/README.md +340 -0
  5. package/android/CMakeLists.txt +52 -0
  6. package/android/build.gradle +49 -0
  7. package/android/cpp-adapter.cpp +9 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/java/com/margelo/nitro/xlsx/NitroXlsxPackage.kt +22 -0
  10. package/cpp/HybridNitroXlsx.cpp +29 -0
  11. package/cpp/HybridNitroXlsx.hpp +19 -0
  12. package/cpp/HybridXlsxCellFormat.cpp +263 -0
  13. package/cpp/HybridXlsxCellFormat.hpp +111 -0
  14. package/cpp/HybridXlsxWorkbook.cpp +184 -0
  15. package/cpp/HybridXlsxWorkbook.hpp +41 -0
  16. package/cpp/HybridXlsxWorksheet.cpp +316 -0
  17. package/cpp/HybridXlsxWorksheet.hpp +86 -0
  18. package/nitro.json +19 -0
  19. package/nitrogen/generated/.gitattributes +1 -0
  20. package/nitrogen/generated/android/NitroXlsx+autolinking.cmake +84 -0
  21. package/nitrogen/generated/android/NitroXlsx+autolinking.gradle +27 -0
  22. package/nitrogen/generated/android/NitroXlsxOnLoad.cpp +49 -0
  23. package/nitrogen/generated/android/NitroXlsxOnLoad.hpp +34 -0
  24. package/nitrogen/generated/android/kotlin/com/margelo/nitro/xlsx/NitroXlsxOnLoad.kt +35 -0
  25. package/nitrogen/generated/ios/NitroXlsx+autolinking.rb +62 -0
  26. package/nitrogen/generated/ios/NitroXlsx-Swift-Cxx-Bridge.cpp +17 -0
  27. package/nitrogen/generated/ios/NitroXlsx-Swift-Cxx-Bridge.hpp +27 -0
  28. package/nitrogen/generated/ios/NitroXlsx-Swift-Cxx-Umbrella.hpp +38 -0
  29. package/nitrogen/generated/ios/NitroXlsxAutolinking.mm +35 -0
  30. package/nitrogen/generated/ios/NitroXlsxAutolinking.swift +16 -0
  31. package/nitrogen/generated/shared/c++/CellType.hpp +100 -0
  32. package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.cpp +23 -0
  33. package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.hpp +68 -0
  34. package/nitrogen/generated/shared/c++/HybridXlsxCellFormatSpec.cpp +62 -0
  35. package/nitrogen/generated/shared/c++/HybridXlsxCellFormatSpec.hpp +104 -0
  36. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.cpp +27 -0
  37. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.hpp +77 -0
  38. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.cpp +69 -0
  39. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.hpp +120 -0
  40. package/package.json +47 -0
  41. package/src/__mocks__/react-native-nitro-modules.ts +28 -0
  42. package/src/__mocks__/react-native.ts +1 -0
  43. package/src/__tests__/index.test.ts +141 -0
  44. package/src/index.ts +195 -0
  45. package/src/specs/NitroXlsx.nitro.ts +154 -0
@@ -0,0 +1,316 @@
1
+ #include "HybridXlsxWorksheet.hpp"
2
+ #include <cstring>
3
+ #include <fstream>
4
+ #include <chrono>
5
+
6
+ namespace margelo::nitro::xlsx {
7
+
8
+ HybridXlsxWorksheet::HybridXlsxWorksheet(OpenXLSX::XLDocument& doc, OpenXLSX::XLWorksheet worksheet)
9
+ : HybridObject("XlsxWorksheet"), HybridXlsxWorksheetSpec(), _doc(doc), _worksheet(worksheet) {
10
+ }
11
+
12
+ HybridXlsxWorksheet::~HybridXlsxWorksheet() {
13
+ }
14
+
15
+ void HybridXlsxWorksheet::applyFormat(OpenXLSX::XLCell& cell, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
16
+ if (!format.has_value()) return;
17
+
18
+ auto hybridFormat = std::dynamic_pointer_cast<HybridXlsxCellFormat>(*format);
19
+ if (!hybridFormat) return;
20
+
21
+ auto styleIndex = hybridFormat->applyToDocument(_doc.styles());
22
+ hybridFormat->applyToCell(cell, styleIndex);
23
+ }
24
+
25
+ void HybridXlsxWorksheet::writeString(double row, double col, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
26
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
27
+ cell.value() = value;
28
+ applyFormat(cell, format);
29
+ }
30
+
31
+ void HybridXlsxWorksheet::writeNumber(double row, double col, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
32
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
33
+ cell.value() = value;
34
+ applyFormat(cell, format);
35
+ }
36
+
37
+ void HybridXlsxWorksheet::writeBoolean(double row, double col, bool value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
38
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
39
+ cell.value() = value;
40
+ applyFormat(cell, format);
41
+ }
42
+
43
+ void HybridXlsxWorksheet::writeBlank(double row, double col, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
44
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
45
+ applyFormat(cell, format);
46
+ }
47
+
48
+ void HybridXlsxWorksheet::writeFormula(double row, double col, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
49
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
50
+ cell.formula() = formula;
51
+ applyFormat(cell, format);
52
+ }
53
+
54
+ void HybridXlsxWorksheet::writeFormulaNum(double row, double col, const std::string& formula, double number, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
55
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
56
+ cell.formula() = formula;
57
+ cell.value() = number;
58
+ applyFormat(cell, format);
59
+ }
60
+
61
+ void HybridXlsxWorksheet::writeFormulaString(double row, double col, const std::string& formula, const std::string& str, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
62
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
63
+ cell.formula() = formula;
64
+ cell.value() = str;
65
+ applyFormat(cell, format);
66
+ }
67
+
68
+ void HybridXlsxWorksheet::writeFormulaBoolean(double row, double col, const std::string& formula, bool boolVal, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
69
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
70
+ cell.formula() = formula;
71
+ cell.value() = boolVal;
72
+ applyFormat(cell, format);
73
+ }
74
+
75
+ void HybridXlsxWorksheet::writeArrayFormula(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
76
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
77
+ cell.formula() = formula;
78
+ }
79
+
80
+ void HybridXlsxWorksheet::writeDatetime(double row, double col, double datetime, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
81
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
82
+ cell.value() = datetime;
83
+ applyFormat(cell, format);
84
+ }
85
+
86
+ void HybridXlsxWorksheet::writeURL(double row, double col, const std::string& url, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
87
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
88
+ cell.value() = url;
89
+ applyFormat(cell, format);
90
+ }
91
+
92
+ void HybridXlsxWorksheet::setColumn(double firstCol, double lastCol, double width, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
93
+ for (unsigned int c = static_cast<unsigned int>(firstCol); c <= static_cast<unsigned int>(lastCol); ++c) {
94
+ _worksheet.column(c).setWidth(static_cast<float>(width));
95
+ }
96
+ }
97
+
98
+ void HybridXlsxWorksheet::setRow(double row, double height, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
99
+ _worksheet.row(static_cast<unsigned int>(row)).setHeight(static_cast<float>(height));
100
+ }
101
+
102
+ void HybridXlsxWorksheet::mergeRange(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
103
+ OpenXLSX::XLCellReference topLeft(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
104
+ OpenXLSX::XLCellReference bottomRight(static_cast<unsigned int>(lastRow), static_cast<unsigned int>(lastCol));
105
+ OpenXLSX::XLCellRange range = _worksheet.range(topLeft, bottomRight);
106
+ _worksheet.mergeCells(range);
107
+ _worksheet.cell(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol)).value() = value;
108
+ }
109
+
110
+ void HybridXlsxWorksheet::mergeRangeNum(double firstRow, double firstCol, double lastRow, double lastCol, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
111
+ OpenXLSX::XLCellReference topLeft(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
112
+ OpenXLSX::XLCellReference bottomRight(static_cast<unsigned int>(lastRow), static_cast<unsigned int>(lastCol));
113
+ OpenXLSX::XLCellRange range = _worksheet.range(topLeft, bottomRight);
114
+ _worksheet.mergeCells(range);
115
+ _worksheet.cell(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol)).value() = value;
116
+ }
117
+
118
+ void HybridXlsxWorksheet::insertImage(double row, double col, const std::string& path, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) {
119
+ }
120
+
121
+ void HybridXlsxWorksheet::insertImageBuffer(double row, double col, const std::shared_ptr<ArrayBuffer>& buffer, const std::string& extension, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) {
122
+ }
123
+
124
+ void HybridXlsxWorksheet::autofilter(double firstRow, double firstCol, double lastRow, double lastCol) {
125
+ }
126
+
127
+ void HybridXlsxWorksheet::freezePanes(double row, double col) {
128
+ }
129
+
130
+ void HybridXlsxWorksheet::splitPanes(double row, double col) {
131
+ }
132
+
133
+ void HybridXlsxWorksheet::setTabColor(double color) {
134
+ }
135
+
136
+ void HybridXlsxWorksheet::hide() {
137
+ }
138
+
139
+ void HybridXlsxWorksheet::activate() {
140
+ _worksheet.setActive();
141
+ }
142
+
143
+ void HybridXlsxWorksheet::setFirstSheet() {
144
+ }
145
+
146
+ void HybridXlsxWorksheet::protect(const std::optional<std::string>& password) {
147
+ if (password.has_value() && !password->empty()) {
148
+ _worksheet.setPassword(*password);
149
+ }
150
+ _worksheet.protectSheet();
151
+ }
152
+
153
+ void HybridXlsxWorksheet::setPortrait() {
154
+ }
155
+
156
+ void HybridXlsxWorksheet::setLandscape() {
157
+ }
158
+
159
+ void HybridXlsxWorksheet::setPaper(double paperType) {
160
+ }
161
+
162
+ void HybridXlsxWorksheet::setHeader(const std::string& header) {
163
+ }
164
+
165
+ void HybridXlsxWorksheet::setFooter(const std::string& footer) {
166
+ }
167
+
168
+ void HybridXlsxWorksheet::setPrintArea(double firstRow, double firstCol, double lastRow, double lastCol) {
169
+ }
170
+
171
+ void HybridXlsxWorksheet::fitToPages(double width, double height) {
172
+ }
173
+
174
+ void HybridXlsxWorksheet::setZoom(double scale) {
175
+ }
176
+
177
+ void HybridXlsxWorksheet::setGridlines(double option) {
178
+ }
179
+
180
+ void HybridXlsxWorksheet::centerHorizontally() {
181
+ }
182
+
183
+ void HybridXlsxWorksheet::centerVertically() {
184
+ }
185
+
186
+ void HybridXlsxWorksheet::setOutline(double level) {
187
+ }
188
+
189
+ void HybridXlsxWorksheet::setColumnHidden(double firstCol, double lastCol, bool hidden) {
190
+ for (unsigned int c = static_cast<unsigned int>(firstCol); c <= static_cast<unsigned int>(lastCol); ++c) {
191
+ _worksheet.column(c).setHidden(hidden);
192
+ }
193
+ }
194
+
195
+ void HybridXlsxWorksheet::setRowHidden(double row, bool hidden) {
196
+ _worksheet.row(static_cast<unsigned int>(row)).setHidden(hidden);
197
+ }
198
+
199
+ std::variant<bool, nitro::NullType, std::string, double> HybridXlsxWorksheet::getCellValue(double row, double col) {
200
+ auto cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
201
+ auto type = cell.value().type();
202
+
203
+ switch (type) {
204
+ case OpenXLSX::XLValueType::String:
205
+ return cell.value().get<std::string>();
206
+ case OpenXLSX::XLValueType::Integer:
207
+ return static_cast<double>(cell.value().get<int64_t>());
208
+ case OpenXLSX::XLValueType::Float:
209
+ return cell.value().get<double>();
210
+ case OpenXLSX::XLValueType::Boolean:
211
+ return cell.value().get<bool>();
212
+ case OpenXLSX::XLValueType::Empty:
213
+ case OpenXLSX::XLValueType::Error:
214
+ default:
215
+ return nitro::NullType{};
216
+ }
217
+ }
218
+
219
+ std::string HybridXlsxWorksheet::getCellString(double row, double col) {
220
+ auto cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
221
+ auto type = cell.value().type();
222
+
223
+ switch (type) {
224
+ case OpenXLSX::XLValueType::String:
225
+ return cell.value().get<std::string>();
226
+ case OpenXLSX::XLValueType::Integer:
227
+ return std::to_string(cell.value().get<int64_t>());
228
+ case OpenXLSX::XLValueType::Float:
229
+ return std::to_string(cell.value().get<double>());
230
+ case OpenXLSX::XLValueType::Boolean:
231
+ return cell.value().get<bool>() ? "TRUE" : "FALSE";
232
+ case OpenXLSX::XLValueType::Empty:
233
+ case OpenXLSX::XLValueType::Error:
234
+ default:
235
+ return "";
236
+ }
237
+ }
238
+
239
+ std::string HybridXlsxWorksheet::getCellRawValue(double row, double col) {
240
+ auto cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
241
+
242
+ if (cell.hasFormula()) {
243
+ return cell.formula().get();
244
+ }
245
+
246
+ auto type = cell.value().type();
247
+ switch (type) {
248
+ case OpenXLSX::XLValueType::String:
249
+ return cell.value().get<std::string>();
250
+ case OpenXLSX::XLValueType::Integer:
251
+ return std::to_string(cell.value().get<int64_t>());
252
+ case OpenXLSX::XLValueType::Float:
253
+ return std::to_string(cell.value().get<double>());
254
+ case OpenXLSX::XLValueType::Boolean:
255
+ return cell.value().get<bool>() ? "TRUE" : "FALSE";
256
+ case OpenXLSX::XLValueType::Empty:
257
+ case OpenXLSX::XLValueType::Error:
258
+ default:
259
+ return "";
260
+ }
261
+ }
262
+
263
+ CellType HybridXlsxWorksheet::getCellType(double row, double col) {
264
+ auto cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
265
+ auto type = cell.value().type();
266
+
267
+ if (cell.hasFormula()) {
268
+ return CellType::FORMULA;
269
+ }
270
+
271
+ switch (type) {
272
+ case OpenXLSX::XLValueType::Empty:
273
+ return CellType::EMPTY;
274
+ case OpenXLSX::XLValueType::String:
275
+ return CellType::STRING;
276
+ case OpenXLSX::XLValueType::Integer:
277
+ case OpenXLSX::XLValueType::Float:
278
+ return CellType::NUMBER;
279
+ case OpenXLSX::XLValueType::Boolean:
280
+ return CellType::BOOLEAN;
281
+ case OpenXLSX::XLValueType::Error:
282
+ return CellType::ERROR;
283
+ default:
284
+ return CellType::EMPTY;
285
+ }
286
+ }
287
+
288
+ std::shared_ptr<HybridXlsxCellFormatSpec> HybridXlsxWorksheet::getCellFormat(double row, double col) {
289
+ auto cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
290
+ auto format = std::make_shared<HybridXlsxCellFormat>();
291
+ return format;
292
+ }
293
+
294
+ double HybridXlsxWorksheet::getRowCount() {
295
+ return static_cast<double>(_worksheet.rowCount());
296
+ }
297
+
298
+ double HybridXlsxWorksheet::getColumnCount() {
299
+ return static_cast<double>(_worksheet.columnCount());
300
+ }
301
+
302
+ double HybridXlsxWorksheet::getLastRow() {
303
+ auto last = _worksheet.lastCell();
304
+ return static_cast<double>(last.row());
305
+ }
306
+
307
+ double HybridXlsxWorksheet::getLastColumn() {
308
+ auto last = _worksheet.lastCell();
309
+ return static_cast<double>(last.column());
310
+ }
311
+
312
+ std::string HybridXlsxWorksheet::getName() {
313
+ return _worksheet.name();
314
+ }
315
+
316
+ }
@@ -0,0 +1,86 @@
1
+ #pragma once
2
+
3
+ #include "HybridXlsxWorksheetSpec.hpp"
4
+ #include <OpenXLSX/XLDocument.hpp>
5
+ #include <OpenXLSX/XLSheet.hpp>
6
+ #include <string>
7
+ #include <memory>
8
+ #include "HybridXlsxCellFormat.hpp"
9
+
10
+ namespace margelo::nitro::xlsx {
11
+
12
+ class HybridXlsxWorksheet : public HybridXlsxWorksheetSpec {
13
+ public:
14
+ HybridXlsxWorksheet(OpenXLSX::XLDocument& doc, OpenXLSX::XLWorksheet worksheet);
15
+ ~HybridXlsxWorksheet() override;
16
+
17
+ void writeString(double row, double col, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
18
+ void writeNumber(double row, double col, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
19
+ void writeBoolean(double row, double col, bool value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
20
+ void writeBlank(double row, double col, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
21
+
22
+ void writeFormula(double row, double col, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
23
+ void writeFormulaNum(double row, double col, const std::string& formula, double number, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
24
+ void writeFormulaString(double row, double col, const std::string& formula, const std::string& str, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
25
+ void writeFormulaBoolean(double row, double col, const std::string& formula, bool boolVal, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
26
+ void writeArrayFormula(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
27
+
28
+ void writeDatetime(double row, double col, double datetime, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
29
+ void writeURL(double row, double col, const std::string& url, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
30
+
31
+ void setColumn(double firstCol, double lastCol, double width, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
32
+ void setRow(double row, double height, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
33
+
34
+ void mergeRange(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
35
+ void mergeRangeNum(double firstRow, double firstCol, double lastRow, double lastCol, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) override;
36
+
37
+ void insertImage(double row, double col, const std::string& path, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) override;
38
+ void insertImageBuffer(double row, double col, const std::shared_ptr<ArrayBuffer>& buffer, const std::string& extension, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) override;
39
+
40
+ void autofilter(double firstRow, double firstCol, double lastRow, double lastCol) override;
41
+
42
+ void freezePanes(double row, double col) override;
43
+ void splitPanes(double row, double col) override;
44
+
45
+ void setTabColor(double color) override;
46
+ void hide() override;
47
+ void activate() override;
48
+ void setFirstSheet() override;
49
+ void protect(const std::optional<std::string>& password) override;
50
+
51
+ void setPortrait() override;
52
+ void setLandscape() override;
53
+ void setPaper(double paperType) override;
54
+ void setHeader(const std::string& header) override;
55
+ void setFooter(const std::string& footer) override;
56
+ void setPrintArea(double firstRow, double firstCol, double lastRow, double lastCol) override;
57
+ void fitToPages(double width, double height) override;
58
+ void setZoom(double scale) override;
59
+ void setGridlines(double option) override;
60
+ void centerHorizontally() override;
61
+ void centerVertically() override;
62
+
63
+ void setOutline(double level) override;
64
+ void setColumnHidden(double firstCol, double lastCol, bool hidden) override;
65
+ void setRowHidden(double row, bool hidden) override;
66
+
67
+ // Read methods
68
+ std::variant<bool, nitro::NullType, std::string, double> getCellValue(double row, double col) override;
69
+ std::string getCellString(double row, double col) override;
70
+ std::string getCellRawValue(double row, double col) override;
71
+ CellType getCellType(double row, double col) override;
72
+ std::shared_ptr<HybridXlsxCellFormatSpec> getCellFormat(double row, double col) override;
73
+ double getRowCount() override;
74
+ double getColumnCount() override;
75
+ double getLastRow() override;
76
+ double getLastColumn() override;
77
+ std::string getName() override;
78
+
79
+ private:
80
+ OpenXLSX::XLDocument& _doc;
81
+ OpenXLSX::XLWorksheet _worksheet;
82
+
83
+ void applyFormat(OpenXLSX::XLCell& cell, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format);
84
+ };
85
+
86
+ }
package/nitro.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "cxxNamespace": ["xlsx"],
3
+ "ios": {
4
+ "iosModuleName": "NitroXlsx"
5
+ },
6
+ "android": {
7
+ "androidNamespace": ["xlsx"],
8
+ "androidCxxLibName": "NitroXlsx"
9
+ },
10
+ "autolinking": {
11
+ "NitroXlsx": {
12
+ "all": {
13
+ "language": "c++",
14
+ "implementationClassName": "HybridNitroXlsx"
15
+ }
16
+ }
17
+ },
18
+ "ignorePaths": ["node_modules", "lib"]
19
+ }
@@ -0,0 +1 @@
1
+ ** linguist-generated=true
@@ -0,0 +1,84 @@
1
+ #
2
+ # NitroXlsx+autolinking.cmake
3
+ # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ # https://github.com/mrousavy/nitro
5
+ # Copyright © Marc Rousavy @ Margelo
6
+ #
7
+
8
+ # This is a CMake file that adds all files generated by Nitrogen
9
+ # to the current CMake project.
10
+ #
11
+ # To use it, add this to your CMakeLists.txt:
12
+ # ```cmake
13
+ # include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/NitroXlsx+autolinking.cmake)
14
+ # ```
15
+
16
+ # Define a flag to check if we are building properly
17
+ add_definitions(-DBUILDING_NITROXLSX_WITH_GENERATED_CMAKE_PROJECT)
18
+
19
+ # Enable Raw Props parsing in react-native (for Nitro Views)
20
+ add_definitions(-DRN_SERIALIZABLE_STATE)
21
+
22
+ # Add all headers that were generated by Nitrogen
23
+ include_directories(
24
+ "../nitrogen/generated/shared/c++"
25
+ "../nitrogen/generated/android/c++"
26
+ "../nitrogen/generated/android/"
27
+ )
28
+
29
+ # Add all .cpp sources that were generated by Nitrogen
30
+ target_sources(
31
+ # CMake project name (Android C++ library name)
32
+ NitroXlsx PRIVATE
33
+ # Autolinking Setup
34
+ ../nitrogen/generated/android/NitroXlsxOnLoad.cpp
35
+ # Shared Nitrogen C++ sources
36
+ ../nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.cpp
37
+ ../nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.cpp
38
+ ../nitrogen/generated/shared/c++/HybridXlsxCellFormatSpec.cpp
39
+ ../nitrogen/generated/shared/c++/HybridNitroXlsxSpec.cpp
40
+ # Android-specific Nitrogen C++ sources
41
+
42
+ )
43
+
44
+ # From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
45
+ # Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
46
+ target_compile_definitions(
47
+ NitroXlsx PRIVATE
48
+ -DFOLLY_NO_CONFIG=1
49
+ -DFOLLY_HAVE_CLOCK_GETTIME=1
50
+ -DFOLLY_USE_LIBCPP=1
51
+ -DFOLLY_CFG_NO_COROUTINES=1
52
+ -DFOLLY_MOBILE=1
53
+ -DFOLLY_HAVE_RECVMMSG=1
54
+ -DFOLLY_HAVE_PTHREAD=1
55
+ # Once we target android-23 above, we can comment
56
+ # the following line. NDK uses GNU style stderror_r() after API 23.
57
+ -DFOLLY_HAVE_XSI_STRERROR_R=1
58
+ )
59
+
60
+ # Add all libraries required by the generated specs
61
+ find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
62
+ find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
63
+ find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
64
+
65
+ # Link all libraries together
66
+ target_link_libraries(
67
+ NitroXlsx
68
+ fbjni::fbjni # <-- Facebook C++ JNI helpers
69
+ ReactAndroid::jsi # <-- RN: JSI
70
+ react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
71
+ )
72
+
73
+ # Link react-native (different prefab between RN 0.75 and RN 0.76)
74
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
75
+ target_link_libraries(
76
+ NitroXlsx
77
+ ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
78
+ )
79
+ else()
80
+ target_link_libraries(
81
+ NitroXlsx
82
+ ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
83
+ )
84
+ endif()
@@ -0,0 +1,27 @@
1
+ ///
2
+ /// NitroXlsx+autolinking.gradle
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /// This is a Gradle file that adds all files generated by Nitrogen
9
+ /// to the current Gradle project.
10
+ ///
11
+ /// To use it, add this to your build.gradle:
12
+ /// ```gradle
13
+ /// apply from: '../nitrogen/generated/android/NitroXlsx+autolinking.gradle'
14
+ /// ```
15
+
16
+ logger.warn("[NitroModules] 🔥 NitroXlsx is boosted by nitro!")
17
+
18
+ android {
19
+ sourceSets {
20
+ main {
21
+ java.srcDirs += [
22
+ // Nitrogen files
23
+ "${project.projectDir}/../nitrogen/generated/android/kotlin"
24
+ ]
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,49 @@
1
+ ///
2
+ /// NitroXlsxOnLoad.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #ifndef BUILDING_NITROXLSX_WITH_GENERATED_CMAKE_PROJECT
9
+ #error NitroXlsxOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
10
+ #endif
11
+
12
+ #include "NitroXlsxOnLoad.hpp"
13
+
14
+ #include <jni.h>
15
+ #include <fbjni/fbjni.h>
16
+ #include <NitroModules/HybridObjectRegistry.hpp>
17
+
18
+ #include "HybridNitroXlsx.hpp"
19
+
20
+ namespace margelo::nitro::xlsx {
21
+
22
+ int initialize(JavaVM* vm) {
23
+ return facebook::jni::initialize(vm, []() {
24
+ ::margelo::nitro::xlsx::registerAllNatives();
25
+ });
26
+ }
27
+
28
+
29
+
30
+ void registerAllNatives() {
31
+ using namespace margelo::nitro;
32
+ using namespace margelo::nitro::xlsx;
33
+
34
+ // Register native JNI methods
35
+
36
+
37
+ // Register Nitro Hybrid Objects
38
+ HybridObjectRegistry::registerHybridObjectConstructor(
39
+ "NitroXlsx",
40
+ []() -> std::shared_ptr<HybridObject> {
41
+ static_assert(std::is_default_constructible_v<HybridNitroXlsx>,
42
+ "The HybridObject \"HybridNitroXlsx\" is not default-constructible! "
43
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
44
+ return std::make_shared<HybridNitroXlsx>();
45
+ }
46
+ );
47
+ }
48
+
49
+ } // namespace margelo::nitro::xlsx
@@ -0,0 +1,34 @@
1
+ ///
2
+ /// NitroXlsxOnLoad.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include <jni.h>
9
+ #include <functional>
10
+ #include <NitroModules/NitroDefines.hpp>
11
+
12
+ namespace margelo::nitro::xlsx {
13
+
14
+ [[deprecated("Use registerNatives() instead.")]]
15
+ int initialize(JavaVM* vm);
16
+
17
+ /**
18
+ * Register the native (C++) part of NitroXlsx, and autolinks all Hybrid Objects.
19
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
20
+ * inside a `facebook::jni::initialize(vm, ...)` call.
21
+ * Example:
22
+ * ```cpp (cpp-adapter.cpp)
23
+ * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
24
+ * return facebook::jni::initialize(vm, []() {
25
+ * // register all NitroXlsx HybridObjects
26
+ * margelo::nitro::xlsx::registerNatives();
27
+ * // any other custom registrations go here.
28
+ * });
29
+ * }
30
+ * ```
31
+ */
32
+ void registerAllNatives();
33
+
34
+ } // namespace margelo::nitro::xlsx
@@ -0,0 +1,35 @@
1
+ ///
2
+ /// NitroXlsxOnLoad.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.xlsx
9
+
10
+ import android.util.Log
11
+
12
+ internal class NitroXlsxOnLoad {
13
+ companion object {
14
+ private const val TAG = "NitroXlsxOnLoad"
15
+ private var didLoad = false
16
+ /**
17
+ * Initializes the native part of "NitroXlsx".
18
+ * This method is idempotent and can be called more than once.
19
+ */
20
+ @JvmStatic
21
+ fun initializeNative() {
22
+ if (didLoad) return
23
+ try {
24
+ Log.i(TAG, "Loading NitroXlsx C++ library...")
25
+ System.loadLibrary("NitroXlsx")
26
+ Log.i(TAG, "Successfully loaded NitroXlsx C++ library!")
27
+ didLoad = true
28
+ } catch (e: Error) {
29
+ Log.e(TAG, "Failed to load NitroXlsx C++ library! Is it properly installed and linked? " +
30
+ "Is the name correct? (see `CMakeLists.txt`, at `add_library(...)`)", e)
31
+ throw e
32
+ }
33
+ }
34
+ }
35
+ }