Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add OpenXML nodes to import/export data #11599

Merged
merged 6 commits into from
Apr 19, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ http://www.nunit.org/index.php?p=license&r=2.6.2
http://www.google.com/fonts/specimen/Open+Sans
http://www.apache.org/licenses/LICENSE-2.0.html

### Open XML SDK
https://github.com/OfficeDev/Open-XML-SDK
https://github.com/OfficeDev/Open-XML-SDK/blob/main/LICENSE

### Prism
http://msdn.microsoft.com/en-us/library/gg406140.aspx
http://msdn.microsoft.com/en-us/library/gg405489(PandP.40).aspx
Expand Down
358 changes: 186 additions & 172 deletions doc/distrib/License.rtf

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions src/Libraries/DSOffice/DSOffice.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="DocumentFormat.OpenXml, Version=2.12.3.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\..\packages\DocumentFormat.OpenXml.2.12.3\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1000\lib\net20\Microsoft.Office.Interop.Excel.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
Expand All @@ -49,13 +52,15 @@
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\AssemblySharedInfoGenerator\AssemblySharedInfo.cs">
<Link>Properties\AssemblySharedInfo.cs</Link>
</Compile>
<Compile Include="Excel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="OpenXmlHelper.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
Expand Down Expand Up @@ -83,6 +88,7 @@
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.en-US.resx">
<Generator>ResXFileCodeGenerator</Generator>
Expand Down
65 changes: 65 additions & 0 deletions src/Libraries/DSOffice/DSOfficeImages.resx
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,71 @@
yBlTS/wbqG+jI9FXGYQqV5rnwRJAFss7uTU9lPVOzzh5XC15l13vF/5rD/fxucmAr+m1nnK1EwhrjDaQ
T64VhjWGGWRzCrluD+v2dDvu5Njgs9mhnJ/Mq0RlgZi1bzEzifIyVOOYzDAMw3ilqh4Z50OfJiOXDQAA
AABJRU5ErkJggg==
</value>
</data>
<data name="DSOffice.Data.ExportOpenXml.Large" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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=
</value>
</data>
<data name="DSOffice.Data.ExportOpenXml.Small" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADISURBVFhH7ZGxDcIwEEUzQkZhFEagpEyJqCjTMULW
QJSIioYFKCjoGcH8T+4sywQEjmOae9Ip9o+Tp/xUhmEYn1jtly6c1Iz7JMKX6ItSMu7/gnNuIcvyQN5h
yBlTS/wbqG+jI9FXGYQqV5rnwRJAFss7uTU9lPVOzzh5XC15l13vF/5rD/fxucmAr+m1nnK1EwhrjDaQ
T64VhjWGGWRzCrluD+v2dDvu5Njgs9mhnJ/Mq0RlgZi1bzEzifIyVOOYzDAMw3ilqh4Z50OfJiOXDQAA
AABJRU5ErkJggg==
</value>
</data>
<data name="DSOffice.Data.ImportOpenXml.Large" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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=
</value>
</data>
<data name="DSOffice.Data.ImportOpenXml.Small" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAErSURBVFhH7ZSxakIxFIbvI/gIPsp9AcHR0dGpszg5
uukb2EE6OpYihYIIossdREGXgha6tLWDIAXL9f/lROIl1yHG7XzwQXKSnBNzYyJFUZRr1Ae11NY3xr4X
dhKTyCfGvuIFjq9plNBFLE3TAoz7i95ja9ho5c2TUDikcBeSmUgYK8i0+8ACMIFjWIElkW3GOBZmE65j
XH7Nxz/7783zqv8khUtsG2UT53X22iAg+RY+sHCOHNvK9PAgOXEVtg3z33cdI5Nbx30qmPkEvAt8gO72
CXjJOjD7q40cS2R6eJC8DHfQdQ8Y41hVpt+G6xjZnn6MXg7/hz8U4pE3ks/J6/r3fSaxN5iYh8leGxQU
iSEfHhakbMcyxna498AH3YQBxduwKF1FUTJE0REZ3Pv1glXtwQAAAABJRU5ErkJggg==
</value>
</data>
</root>
39 changes: 38 additions & 1 deletion src/Libraries/DSOffice/Excel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ internal WorkSheet GetWorksheetByName(string sheetName)
var ws = wb.Worksheets.Cast<Worksheet>().FirstOrDefault(sheet => sheet.Name == sheetName);

if (ws == null)
throw new ArgumentException("No worksheet matches the given string.", "sheetName");
throw new ArgumentException(string.Format(Properties.Resources.WorksheetNotFound, sheetName));

return new WorkSheet(ws, this);
}
Expand Down Expand Up @@ -869,5 +869,42 @@ public static object[][] ExportToExcel(string filePath, string sheetName, int st
{
return Excel.WriteData(filePath, sheetName, startRow, startColumn, data, overWrite, writeAsString);
}

/// <summary>
/// Read data from a Microsoft Excel spreadsheet by using the Open XML standard.
/// Data is read by row and returned in a series of lists by row.
/// Rows and columns are zero-indexed; for example, the value in cell A1 will
/// appear in the data list at [0,0].
/// </summary>
/// <param name="filePath">File representing the Excel workbook</param>
/// <param name="sheetName">Name of the worksheet containing data</param>
/// <param name="startRow">Start row for reading data. Enter 0 for Row 1, 1 for Row 2, etc.</param>
/// <param name="startColumn">Start column for reading data. Enter 0 for Column A, 1 for Column B, etc.</param>
/// <param name="readAsString">Toggle to read cells as strings</param>
/// <returns name="data">Rows of data from the Excel worksheet</returns>
/// <search>office,excel,spreadsheet</search>
public static object[][] ImportOpenXml(string filePath, string sheetName, int startRow = 0, int startColumn = 0, bool readAsString = false)
{
return OpenXmlHelper.Read(filePath, sheetName, startRow, startColumn, readAsString);
}

/// <summary>
/// Write data to a Microsoft Excel spreadsheet by using the Open XML standard.
/// 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 as empty cells.
/// </summary>
/// <param name="filePath">File representing the Excel workbook</param>
/// <param name="sheetName">Name of the worksheet containing data</param>
/// <param name="startRow">Start row for writing data. Enter 0 for Row 1, 1 for Row 2, etc.</param>
/// <param name="startColumn">Start column for writing data. Enter 0 for Column A, 1 for Column B, etc.</param>
/// <param name="data">Data to write to the spreadsheet</param>
/// <param name="overWrite"> Toggle to clear spreadsheet before writing</param>
/// <param name="writeAsString">Toggle to switch between writing cell values as strings</param>
/// <search>office,excel,spreadsheet</search>
public static void ExportOpenXml(string filePath, string sheetName, object[][] data, int startRow = 0, int startColumn = 0, bool overWrite = false, bool writeAsString = false)
{
OpenXmlHelper.Write(filePath, sheetName, data, startRow, startColumn, overWrite, writeAsString);
}
}
}
Loading