diff --git a/src/Libraries/DSOffice/DSOfficeImages.resx b/src/Libraries/DSOffice/DSOfficeImages.resx
index a1d53597224..412f23db397 100644
--- a/src/Libraries/DSOffice/DSOfficeImages.resx
+++ b/src/Libraries/DSOffice/DSOfficeImages.resx
@@ -120,159 +120,186 @@
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAATElEQVRYR+3QsQkAIAxE0Uwr
- juBsLqeWKc5CrjHwH6T5hXAGAOBmzL7yue2ZesRpeHa+ruVzWz1qhdPqUSucVo9a4bR61AqnAcCnIjZ8
- fvMh4IFW4wAAAABJRU5ErkJggg==
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABMSURBVFhH7dCxCQAgDETRTCuO4Gwup5YpzkKuMfAf
+ pPmFcAYA4GbMvvK57Zl6xGl4dr6u5XNbPWqF0+pRK5xWj1rhtHrUCqcBwKciNnx+8yHggVbjAAAAAElF
+ TkSuQmCC
- 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
+ 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
- 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
- yngTyQAAAABJRU5ErkJggg==
-
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGCSURBVFhH7VOxTgJBFLxP4FMolARBFAUUY2FnqaUl
+ tra2Jla2XmdLa6KJ8Qv4DTs/Yd3ZnTk3xkT23cVQ3CQTdt8+ZuYtS9GixUbj/XTuMnnJrzYDiHL5Jxjg
+ s9EQhgBdhihZrofcAPxEiFUawjlnuxVLAMCvOwzx5s1LT2Dl2WHLesgN8JMfry/R+hsLtq8HiHCZDW+m
+ yYX8d2ENALPoWcH2KC0BYBY9K9j/EbkBvNkiekbgDfDIhpwA3u/Mc+mJ1w6Udd5QQGYAXT1ChNf+3wEw
+ +b1nl6VmAtQlpWz4TTCXlLIhFXqYHLib/ZG7OxyH/fPJsbsd74Xa42zino6m1RmIOnooZUMqdt7vByME
+ Qe1isBPq2IPL+cwNt7fCGcJMe72wppQNCiBz7UGYw0STqg9hrke7oY4apWyQmYS1FzE1zHAb2OMnuBoO
+ QjCcoUYpG2QEc02ryTQlzLFWL/oUCKSUDRIBMRF+Bk2Ga9fjS/uwVw9IKRtSYSsp1aLFpqIovgAL6lit
+ yngTyQAAAABJRU5ErkJggg==
+
- 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
- gv64uvoLFK94NiazvjoAAAAASUVORK5CYII=
-
+ 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
+ gv64uvoLFK94NiazvjoAAAAASUVORK5CYII=
+
- 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
+ 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
- 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
- AuDviEpOlLH+AAAAAElFTkSuQmCC
-
+ iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAASGSURBVHhe7ZpPi1RHFMXnI8xH8CPkI/gFBJdZCm6y
+ EpfBlRvBrHQVBBcGEmYVnLhxIYriRlzIhIiJSmJLEtQByajRxD8j7b3V5z1qbp2u6Z5+2G+6zw8ONF3n
+ vnc5Bf3qVfWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQkzC11e+Gk4jlCXYeE0oS7DxmlCWYONRsPYf1nxN
+ KEuw8ZpQlmDjNaEswcajYO0/rPmaUJZg4zWhLMHGa0JZgo1Hwdp/WPM1oSzBxmtCWYKN14SyBBuPgrX/
+ sOZrQlmCjdeEsgQbrwllCTYeBWv/Yc3XhLIEG68JZQk2XhPKEmw8ClYhhBBCCNFPbMl2cjfBWsC8UbAW
+ MG8UrAXMGwVr/2HNR8FawLxRsBYwbxSsBcwbBWv/Yc1HwVrAvFHuGw6HX5hOmtZN113P32wOXE9e/fXb
+ L8/u3Pj+53PnWC0j+phgXV4s5FXTcdPANCnu9ZpVXEbsBQvwMMLcK157GJcT02DBnUkRltwynTedCPLv
+ fIxxBpcVk2CBXRjl1vLatGb60nRoF7nHvV6TcwGXFzU8qFFeLY9MR00s7Jq8xmtzNAk1LCB/cOZcNbFw
+ p5FfI+c4brdYsCVcFKwFPvbt7W/Ofvj4/n+ENHz19uXm5YcX1xrZVyzcQ7lnnMx319SwZTrQ3Hc3pQb3
+ A6z5KFgLfOzx1u8bo3yGw+2P2++u/XH5xxDiLBPgz4X8mZB+imJ/TKnB/QBrPgrWgtM3T5xGMIkHz+/d
+ IiHOMgHuPWvKWWU9RqHFxcbCyH/7N01F0B3Jr92wmM+CvWBh+LZCg6/nWXhdyK/dsI7bCwvDH4wNx0ws
+ vC7k127Ywu2XGwvC93pyWHBdqgUtLDeWw8FRHAl/cWKhdan8OXAQbSwvHsIoi4Sv11loXSp/J1icCWBL
+ uChYd2Ah+B5/4t3229dsGemyYRbmNMvQRu37ADs7iEKb/Yc1HwVrAfJIsABdNpSH2Ip5o0JNC+sxCi32
+ H9Z8FKwF/71/066CNp7evjpBiK2YNyrznzI1DFiPUWhxsbEw8h3QLjbgxinfmNPOaIOF4SdfDf4bPcm+
+ /7SK+0E6KcuxQPKjx0smFuIs8ms2DHBb0WChxLOALt+I/cgy5whuK3IsmHZL2vCfiy4mwa+R//Rs4HYi
+ YuG07wRg1kmI4TuLubJhS7goWAtyz83HV35CUAk/nHn0z8M79pEFPHYZ6jVeax5G+gnK7ztOqcH9AGs+
+ CtaC6IuTAHwPxw9VdqyQ8tD9FM0Pc/yN2sYi8f9FR+J9mdBi/2HNR8FawLwXf/3hu/yMOOD7Ob6qWfvz
+ xeDuk3//vu9nyGkkgJc832/yXdf8GTP0iWb3zoUWlxPLyEMb9wetSfDa9u+J/tm0YxIMrYh2w0I6YPIw
+ J/mbonv8D7zpnw8R+16TMAsWlk+Gvzl7yLn8Oxp6xHyahHljgWsS5o0FrkmYNxa4JmHeWOCahHljgWsS
+ 5o0FrkmYNxZ4nASdnH1uLPRmEhT+vPBJwEchhBBCCCGEEEIIIYQQQgghxBSsrHwC4O+ISk6Usf4AAAAA
+ SUVORK5CYII=
+
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAErSURBVFhH7ZSxakIxFIbvI/gIPsp9AcHR0dGpszg5
- uukb2EE6OpYihYIIossdREGXgha6tLWDIAXL9f/lROIl1yHG7XzwQXKSnBNzYyJFUZRr1Ae11NY3xr4X
- dhKTyCfGvuIFjq9plNBFLE3TAoz7i95ja9ho5c2TUDikcBeSmUgYK8i0+8ACMIFjWIElkW3GOBZmE65j
- XH7Nxz/7783zqv8khUtsG2UT53X22iAg+RY+sHCOHNvK9PAgOXEVtg3z33cdI5Nbx30qmPkEvAt8gO72
- CXjJOjD7q40cS2R6eJC8DHfQdQ8Y41hVpt+G6xjZnn6MXg7/hz8U4pE3ks/J6/r3fSaxN5iYh8leGxQU
- iSEfHhakbMcyxna498AH3YQBxduwKF1FUTJE0REZ3Pv1glXtwQAAAABJRU5ErkJggg==
-
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAErSURBVFhH7ZSxakIxFIbvI/gIPsp9AcHR0dGpszg5
+ uukb2EE6OpYihYIIossdREGXgha6tLWDIAXL9f/lROIl1yHG7XzwQXKSnBNzYyJFUZRr1Ae11NY3xr4X
+ dhKTyCfGvuIFjq9plNBFLE3TAoz7i95ja9ho5c2TUDikcBeSmUgYK8i0+8ACMIFjWIElkW3GOBZmE65j
+ XH7Nxz/7783zqv8khUtsG2UT53X22iAg+RY+sHCOHNvK9PAgOXEVtg3z33cdI5Nbx30qmPkEvAt8gO72
+ CXjJOjD7q40cS2R6eJC8DHfQdQ8Y41hVpt+G6xjZnn6MXg7/hz8U4pE3ks/J6/r3fSaxN5iYh8leGxQU
+ iSEfHhakbMcyxna498AH3YQBxduwKF1FUTJE0REZ3Pv1glXtwQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALWSURBVHhe7doxbhRBEIVhH8FH8BE4AkfwEQgJCRER
+ oTNSZw44AMQOfQE4AhmhRQQCoaW6eWOZqrc9u8KzO5b/T3oC0a/wUI2WEfIJAAAAAAAAAAAAAAAAAOzi
+ 9fXLzT7RWOfOR9FY585H0VjnznNUXT/38KNorHPno2isc+ejaKxz5zmqrp97+FE01rnzUTTWufNRNNa5
+ 8xxV1889/Cga69z5KBrr3PkoGuvceY6q6+cefhSNde58FI117nwUjXXuPEfV9XMPP4rGOnc+isY6dz6K
+ xjp3nqMq8ARsNpvn+ikOLZb/ItJc6ZdwKLH0afmTD5FTHWNJsei8/MmnCJewpFjwtuVPHs8lxCvb27mo
+ WrhujqqF6+ao+o9Y7NzyJ4/jEtwfPEfVwnVzVC1cN0fVO7HQXZff3EbONLpe7g+eo2rhujmqFq6bo2oX
+ y9x5+b9+//wePzzTKP5XLHPfv/ks/6HEMln+scQyWf6xxDJZ/rHEMln+scQyn9by3etfjqqF6+aoWrju
+ zZfrj3/3Oq+9ar7/fHnpfp8WfZn1cw+fo2rhujmqFrn3kMtv0ZdZP/fwOaoWrpujanG/s8/yw+3c8lv0
+ ZTAnFso/uMcSyzzva90Ny39osdDTSPtfyzksfymx2LlLYPlLiwVvuwSWfyix6HwJT2P57hUuR9XCdXNU
+ bQs+i9x954LrXty8ufj24/br9J6vauFmc1RdP/fwOaoWrpujaruAV5GmX4LrtrRLmN7z+6CRZ1xUXT/3
+ 8DmqFq6bo2q7gPsfL1eum6PRwnVzVEUTC28fPxnfSHUosezp4yfjEg4hFj16z3+nGpYQC3YfP+0V8ypy
+ rhqWEkuePn5Y+jHEwtsFsPRt3CtcjqqF6+aoWrhujqqF6+aoun7u4XNULVw3R9XCdXNULVw3R9X1cw+f
+ o2rhujmqFq6bo2rhujmqAgAAAAAAAAAAAAAAAAAAAACSk5M/qVE78xNHtssAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADISURBVFhH7ZGxDcIwEEUzQkZhFEagpEyJqCjTMULW
+ QJSIioYFKCjoGcH8T+4sywQEjmOae9Ip9o+Tp/xUhmEYn1jtly6c1Iz7JMKX6ItSMu7/gnNuIcvyQN5h
+ yBlTS/wbqG+jI9FXGYQqV5rnwRJAFss7uTU9lPVOzzh5XC15l13vF/5rD/fxucmAr+m1nnK1EwhrjDaQ
+ T64VhjWGGWRzCrluD+v2dDvu5Njgs9mhnJ/Mq0RlgZi1bzEzifIyVOOYzDAMw3ilqh4Z50OfJiOXDQAA
+ AABJRU5ErkJggg==
+
- iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC1klEQVR4Xu3aMW4UQRCFYR/B
- R/AROAJH8BEICQkREaEzUmcOOADEDn0BOAIZoUUEAqGlunljmaq3PbvCszuW/096AtGv8FCNlhHyCQAA
- AAAAAAAAAAAAAADs4vX1y80+0VjnzkfRWOfOR9FY585zVF0/9/CjaKxz56NorHPno2isc+c5qq6fe/hR
- NNa581E01rnzUTTWufMcVdfPPfwoGuvc+Sga69z5KBrr3HmOquvnHn4UjXXufBSNde58FI117jxH1fVz
- Dz+Kxjp3PorGOnc+isY6d56jKvAEbDab5/opDi2W/yLSXOmXcCix9Gn5kw+RUx1jSbHovPzJpwiXsKRY
- 8LblTx7PJcQr29u5qFq4bo6qhevmqPqPWOzc8ieP4xLcHzxH1cJ1c1QtXDdH1Tux0F2X39xGzjS6Xu4P
- nqNq4bo5qhaum6NqF8vcefm/fv/8Hj880yj+Vyxz37/5LP+hxDJZ/rHEMln+scQyWf6xxDJZ/rHEMp/W
- 8t3rX46qhevmqFq47s2X649/9zqvvWq+/3x56X6fFn2Z9XMPn6Nq4bo5qha595DLb9GXWT/38DmqFq6b
- o2pxv7PP8sPt3PJb9GUwJxbKP7jHEss872vdDct/aLHQ00j7X8s5LH8psdi5S2D5S4sFb7sEln8oseh8
- CU9j+e4VLkfVwnVzVG0LPovcfeeC617cvLn49uP26/Ser2rhZnNUXT/38DmqFq6bo2q7gFeRpl+C67a0
- S5je8/ugkWdcVF0/9/A5qhaum6Nqu4D7Hy9Xrpuj0cJ1c1RFEwtvHz8Z30h1KLHs6eMn4xIOIRY9es9/
- pxqWEAt2Hz/tFfMqcq4alhJLnj5+WPoxxMLbBbD0bdwrXI6qhevmqFq4bo6qhevmqLp+7uFzVC1cN0fV
- wnVzVC1cN0fV9XMPn6Nq4bo5qhaum6Nq4bo5qgIAAAAAAAAAAAAAAAAAAAAAkpOTP6lRO/MTR7bLAAAA
- AElFTkSuQmCC
-
+ iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALWSURBVHhe7doxbhRBEIVhH8FH8BE4AkfwEQgJCRER
+ oTNSZw44AMQOfQE4AhmhRQQCoaW6eWOZqrc9u8KzO5b/T3oC0a/wUI2WEfIJAAAAAAAAAAAAAAAAAOzi
+ 9fXLzT7RWOfOR9FY585H0VjnznNUXT/38KNorHPno2isc+ejaKxz5zmqrp97+FE01rnzUTTWufNRNNa5
+ 8xxV1889/Cga69z5KBrr3PkoGuvceY6q6+cefhSNde58FI117nwUjXXuPEfV9XMPP4rGOnc+isY6dz6K
+ xjp3nqMq8ARsNpvn+ikOLZb/ItJc6ZdwKLH0afmTD5FTHWNJsei8/MmnCJewpFjwtuVPHs8lxCvb27mo
+ WrhujqqF6+ao+o9Y7NzyJ4/jEtwfPEfVwnVzVC1cN0fVO7HQXZff3EbONLpe7g+eo2rhujmqFq6bo2oX
+ y9x5+b9+//wePzzTKP5XLHPfv/ks/6HEMln+scQyWf6xxDJZ/rHEMln+scQyn9by3etfjqqF6+aoWrju
+ zZfrj3/3Oq+9ar7/fHnpfp8WfZn1cw+fo2rhujmqFrn3kMtv0ZdZP/fwOaoWrpujanG/s8/yw+3c8lv0
+ ZTAnFso/uMcSyzzva90Ny39osdDTSPtfyzksfymx2LlLYPlLiwVvuwSWfyix6HwJT2P57hUuR9XCdXNU
+ bQs+i9x954LrXty8ufj24/br9J6vauFmc1RdP/fwOaoWrpujaruAV5GmX4LrtrRLmN7z+6CRZ1xUXT/3
+ 8DmqFq6bo2q7gPsfL1eum6PRwnVzVEUTC28fPxnfSHUosezp4yfjEg4hFj16z3+nGpYQC3YfP+0V8ypy
+ rhqWEkuePn5Y+jHEwtsFsPRt3CtcjqqF6+aoWrhujqqF6+aoun7u4XNULVw3R9XCdXNULVw3R9X1cw+f
+ o2rhujmqFq6bo2rhujmqAgAAAAAAAAAAAAAAAAAAAACSk5M/qVE78xNHtssAAAAASUVORK5CYII=
+
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADISURBVFhH7ZGxDcIwEEUzQkZhFEagpEyJqCjTMULW
- QJSIioYFKCjoGcH8T+4sywQEjmOae9Ip9o+Tp/xUhmEYn1jtly6c1Iz7JMKX6ItSMu7/gnNuIcvyQN5h
- yBlTS/wbqG+jI9FXGYQqV5rnwRJAFss7uTU9lPVOzzh5XC15l13vF/5rD/fxucmAr+m1nnK1EwhrjDaQ
- T64VhjWGGWRzCrluD+v2dDvu5Njgs9mhnJ/Mq0RlgZi1bzEzifIyVOOYzDAMw3ilqh4Z50OfJiOXDQAA
- AABJRU5ErkJggg==
-
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADISURBVFhH7ZGxDcIwEEUzQkZhFEagpEyJqCjTMULW
+ QJSIioYFKCjoGcH8T+4sywQEjmOae9Ip9o+Tp/xUhmEYn1jtly6c1Iz7JMKX6ItSMu7/gnNuIcvyQN5h
+ yBlTS/wbqG+jI9FXGYQqV5rnwRJAFss7uTU9lPVOzzh5XC15l13vF/5rD/fxucmAr+m1nnK1EwhrjDaQ
+ T64VhjWGGWRzCrluD+v2dDvu5Njgs9mhnJ/Mq0RlgZi1bzEzifIyVOOYzDAMw3ilqh4Z50OfJiOXDQAA
+ AABJRU5ErkJggg==
+
\ No newline at end of file
diff --git a/src/Libraries/DSOffice/Excel.cs b/src/Libraries/DSOffice/Excel.cs
index c568ad53b2f..905832407ae 100644
--- a/src/Libraries/DSOffice/Excel.cs
+++ b/src/Libraries/DSOffice/Excel.cs
@@ -275,28 +275,28 @@ public static WorkBook SaveAsExcelWorkbook(WorkBook workbook, string filename)
[IsVisibleInDynamoLibrary(false)]
public static object[][] ReadFromFile(FileInfo file, string sheetName, bool readAsStrings = false, bool showExcel = true)
{
- object[][] data;
-
- if(!showExcel)
- {
- ExcelInterop.ShowOnStartup = false;
- }
- WorkBook wb = WorkBook.ReadExcelFile(file.FullName);
+ object[][] data;
+
+ if (!showExcel)
+ {
+ ExcelInterop.ShowOnStartup = false;
+ }
+ WorkBook wb = WorkBook.ReadExcelFile(file.FullName);
WorkSheet ws = wb.GetWorksheetByName(sheetName);
if (readAsStrings)
{
- data = ws.GetData(true);
+ data = ws.GetData(true);
}
else
{
- data = ws.Data;
+ data = ws.Data;
}
- if(!showExcel)
+ if (!showExcel)
{
- wb.CloseHidden();
- ExcelInterop.ShowOnStartup = true;
+ wb.CloseHidden();
+ ExcelInterop.ShowOnStartup = true;
}
-
+
return data;
}
@@ -325,10 +325,15 @@ public static object[][] Read(string filePath, string sheetName)
/// office,excel,spreadsheet
[IsVisibleInDynamoLibrary(false)]
public static object[][] WriteToFile(string filePath, string sheetName, int startRow, int startCol, object[][] data, bool overWrite = false)
+ {
+ return WriteData(filePath, sheetName, startRow, startCol, data, overWrite);
+ }
+
+ internal static object[][] WriteData(string filePath, string sheetName, int startRow, int startCol, object[][] data, bool overWrite = false, bool writeAsString = false)
{
WorkBook wb = new WorkBook(filePath);
WorkSheet ws = new WorkSheet(wb, sheetName, overWrite);
- ws = ws.WriteData(startRow, startCol, data);
+ ws = ws.WriteData(startRow, startCol, data, writeAsString);
return ws.Data;
}
}
@@ -522,8 +527,9 @@ internal WorkSheet(Worksheet ws, WorkBook wb)
///
///
///
+ ///
///
- internal WorkSheet WriteData(int startRow, int startColumn, object[][] data)
+ internal WorkSheet WriteData(int startRow, int startColumn, object[][] data, bool writeAsString = false)
{
startRow = Math.Max(0, startRow);
startColumn = Math.Max(0, startColumn);
@@ -537,6 +543,8 @@ internal WorkSheet WriteData(int startRow, int startColumn, object[][] data)
var c1 = (Range)ws.Cells[startRow + 1, startColumn + 1];
var c2 = (Range)ws.Cells[startRow + numRows, startColumn + numColumns];
var range = ws.Range[c1, c2];
+ if(writeAsString)
+ range.NumberFormat = "@";
range.Value = rangeData;
wb.Save();
@@ -833,9 +841,33 @@ public static object[][] ImportExcel(FileInfo file, string sheetName, bool readA
///
/// Data written to the spreadsheet.
/// office,excel,spreadsheet
+ [Obsolete("Use ExportToExcel instead.")]
public static object[][] ExportExcel(string filePath, string sheetName, int startRow, int startCol, object[][] data, bool overWrite = false)
{
- return Excel.WriteToFile(filePath, sheetName, startRow, startCol, data, overWrite);
+ return Excel.WriteData(filePath, sheetName, startRow, startCol, data, overWrite);
+ }
+
+ ///
+ /// Write data to a Microsoft Excel spreadsheet. Data is written by row
+ /// with sublists to be written in successive rows. Rows and columns are
+ /// zero-indexed; for example, the value in the data list at [0,0] will
+ /// be written to cell A1. Null values and empty lists are written to Excel
+ /// as empty cells. This node requires Microsoft Excel to be installed.
+ ///
+ /// File path to the Microsoft Excel spreadsheet.
+ /// Name of the worksheet to write data to.
+ /// Start row for writing data. Enter 0 for Row 1, 1 for Row 2, etc.
+ ///
+ /// Start column for writing data. Enter 0 for Column A, 1 for Column B, etc.
+ ///
+ /// Data to write to the spreadsheet.
+ ///
+ /// Toggle to switch between writing Excel file as strings.
+ /// Data written to the spreadsheet.
+ /// office,excel,spreadsheet
+ public static object[][] ExportToExcel(string filePath, string sheetName, int startRow, int startCol, object[][] data, bool overWrite = false, bool writeAsString = false)
+ {
+ return Excel.WriteData(filePath, sheetName, startRow, startCol, data, overWrite, writeAsString);
}
}
}
diff --git a/src/LibraryViewExtension/web/library/layoutSpecs.json b/src/LibraryViewExtension/web/library/layoutSpecs.json
index db28d332e79..878b04e991b 100644
--- a/src/LibraryViewExtension/web/library/layoutSpecs.json
+++ b/src/LibraryViewExtension/web/library/layoutSpecs.json
@@ -1032,7 +1032,7 @@
"path": "DSOffice.DSOffice.Data.ImportExcel"
},
{
- "path": "DSOffice.DSOffice.Data.ExportExcel"
+ "path": "DSOffice.DSOffice.Data.ExportToExcel"
},
{
"path": "DSOffice.DSOffice.Data.ImportCSV"
diff --git a/src/LibraryViewExtensionMSWebBrowser/web/library/layoutSpecs.json b/src/LibraryViewExtensionMSWebBrowser/web/library/layoutSpecs.json
index ded9aa18164..14d48bc46bb 100644
--- a/src/LibraryViewExtensionMSWebBrowser/web/library/layoutSpecs.json
+++ b/src/LibraryViewExtensionMSWebBrowser/web/library/layoutSpecs.json
@@ -1028,7 +1028,7 @@
"path": "DSOffice.DSOffice.Data.ImportExcel"
},
{
- "path": "DSOffice.DSOffice.Data.ExportExcel"
+ "path": "DSOffice.DSOffice.Data.ExportToExcel"
},
{
"path": "DSOffice.DSOffice.Data.ImportCSV"
diff --git a/test/Libraries/DynamoMSOfficeTests/ExcelTests.cs b/test/Libraries/DynamoMSOfficeTests/ExcelTests.cs
index ded1caf9eaa..2c8d41cdc21 100644
--- a/test/Libraries/DynamoMSOfficeTests/ExcelTests.cs
+++ b/test/Libraries/DynamoMSOfficeTests/ExcelTests.cs
@@ -1180,6 +1180,40 @@ public void TestOverwriteToSingleSheetExcel()
Assert.IsTrue(wb.WorkSheets.Length == 1);
}
+
+ [Test, Category("ExcelTest")]
+ public void CanExportToExcelAsString()
+ {
+ // Arrange
+ string openPath = Path.Combine(TestDirectory, @"core\excel\ExportToExcelAsString.dyn");
+ ViewModel.OpenCommand.Execute(openPath);
+
+ var filename = ViewModel.Model.CurrentWorkspace.FirstNodeFromWorkspace();
+
+ // Act
+ // remap the filename as Excel requires an absolute path
+ filename.Value = filename.HintPath.Replace(@"..\..\..\test", TestDirectory);
+
+ ViewModel.HomeSpace.Run();
+
+ // Codeblock that holds the data that will be exported (value = 12)
+ var dataCodeBlock = ViewModel.Model.CurrentWorkspace.NodeFromWorkspace("8070c45660c349d5bbc143febd22cfcf") as CodeBlockNodeModel;
+ var wb = Excel.ReadExcelFile(filename.Value);
+
+ // Running the graph exports the value 12 to excel,
+ // getting that value here so we can check that the value has been converted to a string.
+ var excelExportDataType = wb.WorkSheets
+ .FirstOrDefault()
+ .Data
+ .FirstOrDefault()
+ .FirstOrDefault()
+ .GetType();
+
+ // Assert
+ Assert.AreEqual(typeof(Int64), dataCodeBlock.CachedValue.Data.GetType());
+ Assert.AreEqual(typeof(string), excelExportDataType);
+ }
+
#endregion
#region Saving
diff --git a/test/ViewExtensionLibraryTests/resources/libraryItems.json b/test/ViewExtensionLibraryTests/resources/libraryItems.json
index 93d3924a399..dd4f6f8439f 100644
--- a/test/ViewExtensionLibraryTests/resources/libraryItems.json
+++ b/test/ViewExtensionLibraryTests/resources/libraryItems.json
@@ -5649,9 +5649,9 @@
"keywords": ""
},
{
- "fullyQualifiedName": "DSOffice.Data.ExportExcel",
- "iconUrl": "http://localhost/icons/DSOffice.Data.ExportExcel.Small?path=DSOffice.dll",
- "contextData": "DSOffice.Data.ExportExcel@string,string,int,int,var[][],bool",
+ "fullyQualifiedName": "DSOffice.Data.ExportToExcel",
+ "iconUrl": "http://localhost/icons/DSOffice.Data.ExportToExcel.Small?path=DSOffice.dll",
+ "contextData": "DSOffice.Data.ExportToExcel@string,string,int,int,var[][],bool,bool",
"parameters": null,
"itemType": "action",
"keywords": ""
diff --git a/test/core/excel/ExportToExcelAsString.dyn b/test/core/excel/ExportToExcelAsString.dyn
new file mode 100644
index 00000000000..4e8da93c289
--- /dev/null
+++ b/test/core/excel/ExportToExcelAsString.dyn
@@ -0,0 +1,284 @@
+{
+ "Uuid": "0bcbd2b1-8e73-4563-9f92-09e8da643f87",
+ "IsCustomNode": false,
+ "Description": null,
+ "Name": "ExportToExcelAsString",
+ "ElementResolver": {
+ "ResolutionMap": {}
+ },
+ "Inputs": [],
+ "Outputs": [],
+ "Nodes": [
+ {
+ "ConcreteType": "CoreNodeModels.Input.Filename, CoreNodeModels",
+ "HintPath": "C:\\Users\\SylvesterKnudsen\\Documents\\GitHub\\StudioLEDynamo\\test\\core\\excel\\WriteFile.xlsx",
+ "InputValue": "..\\Documents\\GitHub\\StudioLEDynamo\\test\\core\\excel\\WriteFile.xlsx",
+ "NodeType": "ExtensionNode",
+ "Id": "29dc0142e4344db5a14bf0a9683abe87",
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Id": "97de3aa417664e59b0c93a1583b78709",
+ "Name": "",
+ "Description": "Filename",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Replication": "Disabled",
+ "Description": "Allows you to select a file on the system to get its filename"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
+ "NodeType": "CodeBlockNode",
+ "Code": "\"Sheet1\";\n0;\ntrue;",
+ "Id": "6ed5a3c91ee4493f8ae3bb508a17ba69",
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Id": "5ddc9ead1589460983fc81caf6884fb3",
+ "Name": "",
+ "Description": "Value of expression at line 1",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "aad5d0fc5856401da307b196f7556955",
+ "Name": "",
+ "Description": "Value of expression at line 2",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "4b78d9136b854d3cbd7faa86e7d7ce46",
+ "Name": "",
+ "Description": "Value of expression at line 3",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Replication": "Disabled",
+ "Description": "Allows for DesignScript code to be authored directly"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "NodeType": "FunctionNode",
+ "FunctionSignature": "DSOffice.Data.ExportToExcel@string,string,int,int,var[][],bool,bool",
+ "Id": "f53cbcbb212249d7813b0706e87f4658",
+ "Inputs": [
+ {
+ "Id": "8467a58d02a04631b3238f286b92cbc9",
+ "Name": "filePath",
+ "Description": "File path to the Microsoft Excel spreadsheet.\n\nstring",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "94c6b99a244342b3a5c7088dfe6242bb",
+ "Name": "sheetName",
+ "Description": "Name of the worksheet to write data to.\n\nstring",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "2a84bf16824347078ab66d6d9419a23f",
+ "Name": "startRow",
+ "Description": "Start row for writing data. Enter 0 for Row 1, 1 for Row 2, etc.\n\nint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "6094c85f8f84400bb58f434e0d91c6bf",
+ "Name": "startCol",
+ "Description": "Start column for writing data. Enter 0 for Column A, 1 for Column B, etc.\n\nint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "cef0308258574561aff4ec753948a948",
+ "Name": "data",
+ "Description": "Data to write to the spreadsheet.\n\nvar[][]",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "a29f108484764b34841351a7c3e296fd",
+ "Name": "overWrite",
+ "Description": "bool\nDefault value : false",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "f4ce7ecd0f5345b1877a20f2aea57563",
+ "Name": "writeAsString",
+ "Description": "Toggle to switch between writing Excel file as strings.\n\nbool\nDefault value : false",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "c962199304794b35857e2a9a640ba711",
+ "Name": "data",
+ "Description": "Data written to the spreadsheet.",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Replication": "Auto",
+ "Description": "Write data to a Microsoft Excel spreadsheet. Data is written by row with sublists to be written in successive rows. Rows and columns are zero-indexed; for example, the value in the data list at [0,0] will be written to cell A1. Null values and empty lists are written to Excel as empty cells. This node requires Microsoft Excel to be installed.\n\nData.ExportToExcel (filePath: string, sheetName: string, startRow: int, startCol: int, data: var[][], overWrite: bool = false, writeAsString: bool = false): var[][]"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
+ "NodeType": "CodeBlockNode",
+ "Code": "12;",
+ "Id": "8070c45660c349d5bbc143febd22cfcf",
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Id": "bffcb369095c4d11ade0f588d04e5583",
+ "Name": "",
+ "Description": "Value of expression at line 1",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Replication": "Disabled",
+ "Description": "Allows for DesignScript code to be authored directly"
+ }
+ ],
+ "Connectors": [
+ {
+ "Start": "97de3aa417664e59b0c93a1583b78709",
+ "End": "8467a58d02a04631b3238f286b92cbc9",
+ "Id": "c5ffe00350d146d1980a2a947b80c63e"
+ },
+ {
+ "Start": "5ddc9ead1589460983fc81caf6884fb3",
+ "End": "94c6b99a244342b3a5c7088dfe6242bb",
+ "Id": "65b478928e2249c3b60de476ca441c75"
+ },
+ {
+ "Start": "aad5d0fc5856401da307b196f7556955",
+ "End": "2a84bf16824347078ab66d6d9419a23f",
+ "Id": "e77510b77ab64d6f977dac9a172e2318"
+ },
+ {
+ "Start": "aad5d0fc5856401da307b196f7556955",
+ "End": "6094c85f8f84400bb58f434e0d91c6bf",
+ "Id": "c7bb8c99000148b1b6b5e685aed47b11"
+ },
+ {
+ "Start": "4b78d9136b854d3cbd7faa86e7d7ce46",
+ "End": "a29f108484764b34841351a7c3e296fd",
+ "Id": "d621e99b27b44d848e576da57056f794"
+ },
+ {
+ "Start": "4b78d9136b854d3cbd7faa86e7d7ce46",
+ "End": "f4ce7ecd0f5345b1877a20f2aea57563",
+ "Id": "c1b138f5b97c47b28f03906709295c6f"
+ },
+ {
+ "Start": "bffcb369095c4d11ade0f588d04e5583",
+ "End": "cef0308258574561aff4ec753948a948",
+ "Id": "9e019e4b16e7445a8ca861fbc6b31061"
+ }
+ ],
+ "Dependencies": [],
+ "NodeLibraryDependencies": [],
+ "Bindings": [],
+ "View": {
+ "Dynamo": {
+ "ScaleFactor": 1.0,
+ "HasRunWithoutCrash": true,
+ "IsVisibleInDynamoLibrary": true,
+ "Version": "2.11.0.3455",
+ "RunType": "Manual",
+ "RunPeriod": "1000"
+ },
+ "Camera": {
+ "Name": "Background Preview",
+ "EyeX": -17.0,
+ "EyeY": 24.0,
+ "EyeZ": 50.0,
+ "LookX": 12.0,
+ "LookY": -13.0,
+ "LookZ": -58.0,
+ "UpX": 0.0,
+ "UpY": 1.0,
+ "UpZ": 0.0
+ },
+ "NodeViews": [
+ {
+ "ShowGeometry": true,
+ "Name": "File Path",
+ "Id": "29dc0142e4344db5a14bf0a9683abe87",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "X": 88.0,
+ "Y": 239.0
+ },
+ {
+ "ShowGeometry": true,
+ "Name": "Code Block",
+ "Id": "6ed5a3c91ee4493f8ae3bb508a17ba69",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "X": 151.0,
+ "Y": 324.0
+ },
+ {
+ "ShowGeometry": true,
+ "Name": "Data.ExportToExcel",
+ "Id": "f53cbcbb212249d7813b0706e87f4658",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "X": 385.0,
+ "Y": 237.5
+ },
+ {
+ "ShowGeometry": true,
+ "Name": "Data",
+ "Id": "8070c45660c349d5bbc143febd22cfcf",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "X": 146.0,
+ "Y": 455.0
+ }
+ ],
+ "Annotations": [],
+ "X": -18.0,
+ "Y": -50.0,
+ "Zoom": 1.0
+ }
+}
\ No newline at end of file