PowerShell Import-Excel - This PowerShell Module wraps the .NET [EPPlus DLL](http://epplus.codeplex.com/) (included). Easily integrate reading and writing Excel spreadsheets into PowerShell, without launching Excel in the background. You can also automate the creation of Pivot Tables and Charts. Install - There are two ways to install this module. If you are running PowerShell V5 Install-Module -Name ImportExcel Otherwise To install in your personal modules folder (e.g. ~\Documents\WindowsPowerShell\Modules), run: ```powershell iex (new-object System.Net.WebClient).DownloadString('https://raw.github.com/dfinke/ImportExcel/master/Install.ps1') ``` # What's new #### 3/2/ * Added `GreaterThan`, `GreaterThanOrEqual`, `LessThan`, `LessThanOrEqual` to `New-ConditionalText` ``` echo 489 668 299 777 860 151 119 497 234 788 | Export-Excel c:\temp\test.xlsx -Show ` -ConditionalText (New-ConditionalText -ConditionalType GreaterThan 525) ``` ![](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/GTConditional.png) #### 2/22/2016 * `Import-Html` using Lee Holmes [Extracting Tables from PowerShell’s Invoke-WebRequest](http://www.leeholmes.com/blog/2015/01/05/extracting-tables-from-powershells-invoke-webrequest/) ![](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/ImportHtml.gif) #### 2/17/2016 * Added Conditional Text types of `Equal` and `NotEqual` * Phone #'s like '+33 011 234 34' will be now be handled correctly ## Try *PassThru* ```powershell $file = "C:\Temp\passthru.xlsx" rm $file -ErrorAction Ignore $xlPkg = $( New-PSItem north 10 New-PSItem east 20 New-PSItem west 30 New-PSItem south 40 ) | Export-Excel $file -PassThru $ws=$xlPkg.Workbook.Worksheets[1] $ws.Cells["A3"].Value = "Hello World" $ws.Cells["B3"].Value = "Updating cells" $ws.Cells["D1:D5"].Value = "Data" $ws.Cells.AutoFitColumns() $xlPkg.Save() $xlPkg.Dispose() Invoke-Item $file ``` ## Result ![](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/PassThru.png) #### 1/18/2016 * Added `Conditional Text Formatting`. [Boe Prox](https://twitter.com/proxb) posted about [HTML Reporting, Part 2: Take Your Reporting a Step Further](https://mcpmag.com/articles/2016/01/14/html-reporting-part-2.aspx) and colorized cells. Great idea, now part of the PowerShell Excel module. ![](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/ConditionalText2.gif) #### 1/7/2016 * Added `Get-ExcelSheetInfo` - Great contribution from *Johan Åkerström* check him out on [GitHub](https://github.com/CosmosKey) and [Twitter](https://twitter.com/neptune443) ![](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/GetExcelSheetInfo.png) #### 12/26/2015 * Added `NoLegend`, `Show-Category`, `ShowPercent` for all charts including Pivot Charts * Updated PieChart, BarChart, ColumnChart and Line chart to work with the pipeline and added `NoLegend`, `Show-Category`, `ShowPercent` #### 12/17/2015 These new features open the door for really sophisticated work sheet creation. Stay tuned for a [blog post](http://www.dougfinke.com/blog/) and examples. ***Quick List*** * StartRow, StartColumn for placing data anywhere in a sheet * New-ExcelChart - Add charts to a sheet, multiple series for a chart, locate the chart anywhere on the sheet * AutoNameRange, Use functions and/or calculations in a cell * Quick charting using PieChart, BarChart, ColumnChart and more ![](https://raw.githubusercontent.com/dfinke/GifCam/master/JustCharts.gif) #### 10/20/2015 Big bug fix for version 3.0 PowerShell folks! This technique fails in 3.0 and works in 4.0 and later. ```powershell $m="substring" "hello".$m(2,1) ``` Adding `.invoke` works in 3.0 and later. ```powershell $m="substring" "hello".$m.invoke(2,1) ``` A ***big thank you*** to [DarkLite1](https://github.com/DarkLite1) for adding the help to Export-Excel. Added `-HeaderRow` parameter. Sometimes the heading does not start in Row 1. #### 10/16/2015 Fixes [Export-Excel generates corrupt Excel file](https://github.com/dfinke/ImportExcel/issues/46) #### 10/15/2015 `Import-Excel` has a new parameter `NoHeader`. If data in the sheet does not have headers and you don't want to supply your own, `Import-Excel` will generate the property name. `Import-Excel` now returns `.Value` rather than `.Text` #### 10/1/2015 Merged ValidateSet for Encoding and Extension. Thank you [Irwin Strachan](https://github.com/irwins). #### 9/30/2015 Export-Excel can now handle data that is **not** an object echo a b c 1 $true 2.1 1/1/2015 | Export-Excel c:\temp\test.xlsx -Show Or dir -Name | Export-Excel c:\temp\test.xlsx -Show #### 9/25/2015 **Hide worksheets** Got a great request from [forensicsguy20012004](https://github.com/forensicsguy20012004) to hide worksheets. You create a few pivotables, generate charts and then pivotable worksheets don't need to be visible. `Export-Excel` now has a `-HideSheet` parameter that takes and array of worksheet names and hides them. ##### Example Here, you create four worksheets named `PM`,`Handles`,`Services` and `Files`. The last line creates the `Files` sheet and then hides the `Handles`,`Services` sheets. $p = Get-Process $p|select company, pm | Export-Excel $xlFile -WorkSheetname PM $p|select company, handles| Export-Excel $xlFile -WorkSheetname Handles Get-Service| Export-Excel $xlFile -WorkSheetname Services dir -File | Export-Excel $xlFile -WorkSheetname Files -Show -HideSheet Handles, Services **Note** There is a bug in EPPlus that does not let you hide the first worksheet created. Hopefully it'll resolved soon. #### 9/11/2015 Added Conditional formatting. See [TryConditional.ps1](https://github.com/dfinke/ImportExcel/blob/master/TryConditional.ps1) as an example. Or, check out the short ***"How To"*** video. [![image](http://www.dougfinke.com/videos/excelpsmodule/ExcelPSModule_First_Frame.png)](http://www.dougfinke.com/videos/excelpsmodule/excelpsmodule.mp4) #### 8/21/2015 * Now import Excel sheets even if the file is open in Excel. Thank you [Francois Lachance-Guillemette](https://github.com/francoislg) #### 7/09/2015 * For -PivotRows you can pass a `hashtable` with the name of the property and the type of calculation. `Sum`, `Average`, `Max`, `Min`, `Product`, `StdDev`, `StdDevp`, `Var`, `Varp` ```powershell Get-Service | Export-Excel "c:\temp\test.xlsx" ` -Show ` -IncludePivotTable ` -PivotRows status ` -PivotData @{status='count'} ``` #### 6/16/2015 (Thanks [Justin](https://github.com/zippy1981)) * Improvements to PivotTable overwriting * Added two parameters to Export-Excel * RangeName - Turns the data piped to Export-Excel into a named range. * TableName - Turns the data piped to Export-Excel into an excel table. Examples Get-Process|Export-Excel foo.xlsx -Verbose -IncludePivotTable -TableName "Processes" -Show Get-Process|Export-Excel foo.xlsx -Verbose -IncludePivotTable -RangeName "Processes" -Show #### 5/25/2015 * Fixed null header problem #### 5/17/2015 * Added three parameters: * FreezeTopRow - Freezes the first row of the data * AutoFilter - Enables filtering for the data in the sheet * BoldTopRow - Bolds the top row of data, the column headers Example Get-CimInstance win32_service | select state, accept*, start*, caption | Export-Excel test.xlsx -Show -BoldTopRow -AutoFilter -FreezeTopRow -AutoSize ![image](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/FilterFreezeBold.gif) #### 5/4/2015 * Published to PowerShell Gallery. In PowerShell v5 use `Find-Module importexcel` then `Find-Module importexcel | Install-Module` #### 4/27/2015 * datetime properties were displaying as ints, now are formatted #### 4/25/2015 * Now you can create multiple Pivot tables in one pass * Thanks to [pscookiemonster](https://twitter.com/pscookiemonster), he submitted a repro case to the EPPlus CodePlex project and got it fixed #### Example $ps = ps $ps | Export-Excel .\testExport.xlsx -WorkSheetname memory ` -IncludePivotTable -PivotRows Company -PivotData PM ` -IncludePivotChart -ChartType PieExploded3D $ps | Export-Excel .\testExport.xlsx -WorkSheetname handles ` -IncludePivotTable -PivotRows Company -PivotData Handles ` -IncludePivotChart -ChartType PieExploded3D -Show ![image](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/MultiplePivotTables.png) #### 4/20/2015 * Included and embellished [Claus Nielsen](https://github.com/Claustn) function to take all sheets in an Excel file workbook and create a text file for each `ConvertFrom-ExcelSheet` * Renamed `Export-MultipleExcelSheets` to `ConvertFrom-ExcelSheet` #### 4/13/2015 * You can add a title to the Excel "Report" `Title`, `TitleFillPattern`, `TitleBold`, `TitleSize`, `TitleBackgroundColor` * Thanks to [Irwin Strachan](http://pshirwin.wordpress.com) for this and other great suggestions, testing and more #### 4/10/2015 * Renamed `AutoFitColumns` to `AutoSize` * Implemented `Export-MultipleExcelSheets` * Implemented `-Password` for a worksheet * Replaced `-Force` switch with `-NoClobber` switch * Added examples for `Get-Help` * If Pivot table is requested, that sheet becomes the tab selected #### 4/8/2015 * Implemented exporting data to **named sheets** via the -WorkSheename parameter. Examples - `gsv | Export-Excel .\test.xlsx -WorkSheetname Services` `dir -file | Export-Excel .\test.xlsx -WorkSheetname Files` `ps | Export-Excel .\test.xlsx -WorkSheetname Processes -IncludePivotTable -Show -PivotRows Company -PivotData PM` #### Convert (All or Some) Excel Sheets to Text files Reads each sheet in TestSheets.xlsx and outputs it to the data directory as the sheet name with the extension .txt ConvertFrom-ExcelSheet .\TestSheets.xlsx .\data Reads and outputs sheets like Sheet10 and Sheet20 form TestSheets.xlsx and outputs it to the data directory as the sheet name with the extension .txt ConvertFrom-ExcelSheet .\TestSheets.xlsx .\data sheet?0 #### Example Adding a Title You can set the pattern, size and of if the title is bold. $p=@{ Title = "Process Report as of $(Get-Date)" TitleFillPattern = "LightTrellis" TitleSize = 18 TitleBold = $true Path = "$pwd\testExport.xlsx" Show = $true AutoSize = $true } Get-Process | Where Company | Select Company, PM | Export-Excel @p ![image](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/Title.png) #### Example Export-MultipleExcelSheets ![image](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/ExportMultiple.gif) $p = Get-Process $DataToGather = @{ PM = {$p|select company, pm} Handles = {$p|select company, handles} Services = {gsv} Files = {dir -File} Albums = {(Invoke-RestMethod http://www.dougfinke.com/powershellfordevelopers/albums.js)} } Export-MultipleExcelSheets -Show -AutoSize .\testExport.xlsx $DataToGather ***NOTE*** If the sheet exists when using *-WorkSheetname* parameter, it will be deleted and then added with the new data. ## Get-Process Exported to Excel ### Total Physical Memory Grouped By Company ![image](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/PivotTablesAndCharts.png) ## Importing data from an Excel spreadsheet ![image](https://raw.githubusercontent.com/dfinke/ImportExcel/master/images/TryImportExcel.gif) You can also find EPPLus on [Nuget](https://www.nuget.org/packages/EPPlus/). ## Known Issues * Using `-IncludePivotTable`, if that pivot table name exists, you'll get an error. * Investigating a solution * *Workaround* delete the Excel file first, then do the export