Данный материал является переводом оригинальной статьи «ATA Learning : Adam Bertram : PowerShell and Excel: Seize the Power!».
Microsoft Excel — один из тех вездесущих инструментов, от которых большинство из нас не может уйти, даже если хочет. Многие ИТ-специалисты используют Excel, как небольшую базу данных, в которой хранятся тонны данных в различных процедурах автоматизации. Каков наилучший сценарий автоматизации и Excel? Это, например, PowerShell!
Работу с таблицами Excel непросто автоматизировать. В отличие от менее функционального (и более простого) аналога файла CSV, книги Excel — это не просто текстовые файлы. Для работы со сложными книгами Excel потребует от PowerShell манипуляции с Component Object Model (COM), для чего раньше нужно было установить Excel. Однако, на самом деле, это вовсе не обязательно. Например, проницательный участник сообщества PowerShell, Doug Finke, создал модуль PowerShell, названный ImportExcel. Модуль устраняет сложность работы с Excel и позволяет легко работать с книгами Excel через PowerShell сценарии!
В этой статье рассмотрим пример того, что можно сделать в PowerShell и Excel с помощью модуля ImportExcel, а также рассмотрим несколько популярных вариантов использования.
Предварительные требования
При запуске модуля ImportExcel в системе Windows отдельные зависимости не требуются. Однако, если вы работаете с MacOS, вам необходимо установить пакет mono-libgdiplus, используя команду вида:
brew install mono-libgdiplus
Примечание: Все примеры в этой статье будут построены с использованием macOS, но все они должны работать и на других платформах. При использовании macOS, не забудьте перезапустить сеанс PowerShell, прежде чем продолжить.
Установка модуля ImportExcel
Начните с загрузки и установки модуля через PowerShell Gallery, запустив:
Install-Module ImportExcel -Scope CurrentUser
Через несколько секунд все будет в порядке.
Использование PowerShell для экспорта в рабочий лист Excel
Возможно, вы знакомы со стандартными командлетами PowerShell Export-Csv и Import-Csv. Эти командлеты позволяют читать и экспортировать объекты PowerShell в файлы CSV. К сожалению, в PowerShell нет таких же встроенных командлетов для Excel. Но, используя модуль ImportExcel, вы можете создать такой функционал!
Один из наиболее частых запросов системного администратора — это экспорт объектов PowerShell в рабочий лист Excel. С помощью командлета Export-Excel из модуля ImportExcel, вы можете легко сделать это. Командлет Export-Excel принимает любой объект точно так же, как делает Export-Csv. Этому командлету можно передать любой объект.
Например, возможно, вам нужно найти какие-то процессы, запущенные на вашем локальном компьютере, и поместить их в книгу Excel.
Чтобы найти процессы, запущенные в системе с помощью PowerShell, используйте командлет Get-Process, который возвращает каждый запущенный процесс и различную информацию о каждом процессе. Чтобы экспортировать эту информацию в Excel, используйте командлет Export-Excel, указывающий путь к создаваемой книге Excel. Вы можете увидеть пример команды и снимок экрана сгенерированного файла Excel ниже.
Get-Process | Export-Excel -Path './processes.xlsx
Поздравляем! Вы экспортировали всю информацию точно так же, как Export-Csv, но, в отличие от Export-Csv, мы можем сделать эти данные намного интереснее. Убедитесь, что имя рабочего листа называется «Proccesses», данные находятся в таблице, а размер строк устанавливается автоматически.
Добавим к командлету параметр -AutoSize для автоматического изменения размера всех строк, -TableName, чтобы указать имя таблицы, которая будет включать все данные, и имя параметра -WorksheetName для процессов, и сможем увидеть на снимке экрана ниже, что в итоге получится.
Get-Process | Export-Excel -Path './processes.xlsx' -AutoSize -TableName 'Processes' -WorksheetName 'Proccesses'
Командлет Export-Excel имеет множество параметров, которые можно использовать для создания книг Excel всех видов. Для получения полной информации о возможностях Export-Excel, запустите:
Get-Help Export-Excel
Использование PowerShell для импорта в Excel
Итак, ранее вы экспортировали некоторую информацию в файл с именем process.xlsx. Возможно, теперь вам нужно переместить этот файл на другой компьютер и импортировать / прочитать эту информацию. Командлет Import-Excel к вашим услугам.
При простейшем использовании вам нужно только указать путь к документу / книге Excel с помощью параметра -Path, как показано ниже. Вы увидите, что он читает первый рабочий лист, в данном случае рабочий лист «Processes», и возвращает объекты PowerShell.
Import-Excel -Path './processes.xlsx'
Может быть, у вас есть несколько листов в книге Excel? Вы можете прочитать конкретный рабочий лист с помощью параметра -WorkSheetname.
Import-Excel -Path './processes.xlsx' -WorkSheetname 'SecondWorksheet'
Вам нужно читать только определенные столбцы из рабочего листа Excel? Используйте параметр -HeaderName, чтобы указать только те параметры, которые вы хотите прочитать.
Import-Excel -Path './processes.xlsx' –WorkSheetname 'Processes' -HeaderName 'CPU','Handle'
Командлет Import-Excel имеет другие параметры, которые можно использовать для чтения книг Excel всех типов. Чтобы получить полное изложение всего, что может делать Import-Excel, запустите:
Get-Help Import-Excel
Использование PowerShell для получения (и установки) значений ячеек Excel
Теперь вы знаете, как читать весь лист Excel с помощью PowerShell. Но что, если вам нужно только одно значение ячейки? Технически вы можете использовать Import-Excel и отфильтровать нужное значение с помощью Where-Object, но это будет не слишком эффективно.
Вместо этого, используя командлет Open-ExcelPackage, вы можете «преобразовать» книгу Excel в объект PowerShell, который затем можно будет читать и изменять. Этот командлет аналогичен использованию New-Object -ComObject ‘Excel.Application’, если работать напрямую с COM-объектами.
Чтобы найти значение ячейки, сначала откройте книгу Excel, чтобы занести его в память. Затем выберите лист внутри книги.
$excel = Open-ExcelPackage -Path './processes.xlsx'
$worksheet = $excel.Workbook.Worksheets['Processes']
Этот процесс похож на способ открытия книг с помощью COM-объекта ‘Excel.Workbooks.Open’.
После того, как рабочий лист назначен переменной, вы можете перейти к отдельным строкам, столбцам и ячейкам. Возможно, вам нужно найти все значения ячеек в строке A1. Вам просто нужно сослаться на свойство ‘Cells’, указав индекс A1, как показано ниже.
$worksheet.Cells['A1'].Value
Вы также можете изменить значение ячеек на листе, присвоив другое значение, например:
$worksheet.Cells['A1'] = 'differentvalue'
Будучи хранимым в оперативной памяти, важно высвобождать пакет Excel с помощью командлета Close-ExcelPackage.
Close-ExcelPackage $excel
Конверсия Excel в файлы CSV с помощью PowerShell
Если у вас есть содержимое листа Excel, представленное с помощью объектов PowerShell, преобразование листов Excel в CSV просто требует отправки этих объектов в командлет Export-Csv.
Используя созданную ранее книгу processes.xlsx, прочтите первый рабочий лист, который получает все данные в объекты PowerShell, а затем экспортируйте эти объекты в CSV с помощью приведенной ниже команды.
Import-Excel './processes.xlsx' | Export-Csv -Path './processes.csv' -NoTypeInformation
Конверсия множества рабочих листов
Если у вас есть книга Excel с несколькими листами, вы также можете создать файл CSV для каждого листа. Для этого вы можете найти все листы в книге с помощью командлета Get-ExcelSheetInfo. Когда у вас есть имена рабочих листов, вы можете передать их в параметр -WorksheetName, а также использовать имя листа в качестве имени файла CSV.
Ниже вы можете найти необходимый пример кода.
$sheets = (Get-ExcelSheetInfo -Path './processes.xlsx').Name
foreach ($sheet in $sheets) {
Import-Excel -WorksheetName $sheet -Path './processes.xlsx' | Export-Csv "./$sheet.csv" -NoTypeInformation
}
Заключение
Используя модуль ImportExcel из библиотеки модулей PowerShell, вы можете импортировать, экспортировать и управлять данными в книгах Excel точно так же, как и в CSV, без установки Excel!
The ImportExcel is a PowerShell module that allows you import to or export data directly from Excel spreadsheets without having Microsoft Excel installed on your computer. In this tutorial, you’ll learn to work with Import-Excel and Export-Excel. The ImportExcel module runs on Windows, Linux, or Mac and now can be used in Azure functions and GitHub Actions. Simply put, if you need to generate reports for work, you must learn this module.
Contents
- Importing data from Excel
- Export data to Excel
- Adding data to an existing spreadsheet
- Exporting data with formatting
- Creating charts
- Editing existing data in an Excel spreadsheet
- Conclusion and links
- Author
- Recent Posts
Mike Kanakos is a Cloud and Datacenter Microsoft MVP, tech blogger and PowerShell community leader. He writes about infrastructure management and cloud automation. You can follow Mike on his blog https://www.commandline.ninja or on Twitter at @MikeKanakos.
Doug Finke, a Microsoft MVP since 2009, builds and maintains the module. Doug is constantly improving the module and releases new module updates frequently. As of this writing, the module is at v7.1.3 and is continually being developed. His module is nearing 1 million downloads since its first release! Installing the module is a simple task with PowerShell code.
Install-Module -Name ImportExcel
Excel is not required to be installed for this module to work. The module installs a .net DLL named epplus.dll that allows the module to import Excel data or export to Excel format. This allows you to install the module on a server without having to install Office on the server.
Importing data from Excel
Getting started with the module is very easy. Let’s start by importing some data from Excel. In this first demo, I’ll be importing some simple data I have from a table in Excel.
Sample Excel table data for import
To import data, I use the Import-Excel cmdlet and specify the path. In this example, I will also save the data to a variable called «Fruit» for later use.
Import-Excel "c:tempExcelDemo.xlsx" -OutVariable Fruit
Excel data import in PowerShell
Now, we have a simple table with data organized in columns and rows. The table properties reveal that PowerShell has created a PSCustomObject with two note properties for the two columns.
Excel table properties
But what if I have a large table of data? I can specify which data gets imported without having to pull in the entire table. Let’s look at how that works.
I have created a new tab in my spreadsheet that contains all the process info from my machine. I have named the tab «Processes.» The spreadsheet has 69 columns of data. I could import all these columns and filter the data, but for this demonstration I just want the Name, ProcessName, CPU, and Memory columns.
Process info data in Excel
Using the Import-Excel cmdlet, I can pull in just the data I am interested in. Let’s pull in the columns I mentioned earlier (Name, ProcessName, CPU, and Memory). For this demo, I only want 6 rows of data. To accomplish this, I use the -ImportColumns, -StartRow and -EndRow parameters.
To pick the columns, I simply count columns from left to right in my spreadsheet starting at 1. I know you can’t see the full spreadsheet, but I have already counted out the columns that I need. To select the columns I want, I will need columns 1, 6, 12, and 46. But if I want to keep them in the order I mentioned above, then the order would have to be 1, 46, 12, and 6.
import-excel C:tempExcelDemo.xlsx -WorksheetName Processes -ImportColumns @(1, 46, 12, 6) -startrow 1 -endrow 7
Process info imported into PowerShell
Export data to Excel
As with the process of importing data, I can also export data to Excel easily with just one line of code. Let’s go back to my previous example: getting the process data. If I want to export all the process info on my machine, all I need to do is type one line:
Get-process | Export-Excel
This results in the Export-Excel cmdlet creating a spreadsheet. If I have Excel installed, it launches Excel and presents the file output to me.
Exporting data to Excel using default values
Notice that I didn’t specify a filename or any other formatting information. However, the Export-Excel cmdlet created the spreadsheet and applied some default formatting (see callout 2) and created a temporary file for me (callout 1).
Of course, I can choose a filename and path on export, if I so desire, by using the -path parameter and inputting a value like so:
Get-process | Export-Excel C:tempProcessList.xlsx
Adding data to an existing spreadsheet
At some point, you will need to add data to an existing spreadsheet. The -Append parameter adds data to an existing spreadsheet. I can specify a worksheet to add to with the -worksheet parameter or I can start a new worksheet with the same parameter but picking a new tab name.
So far, I have been working on a spreadsheet named «ExcelDemo.xlsx,» which contains the Fruit and Processes worksheets. I want to add a new tab named «People» and copy in data from a small table I created.
Table of person and city info saved to the People variable
Exporting this data to my existing Excel spreadsheet and creating a new worksheet would look like this:
$People | Export-Excel c:tempExcelDemo.xlsx -Append -WorksheetName "People"
People table export
This is easy and doesn’t require much code. Below, we can see the worksheet tabs that have been created from Export-Excel.
Excel worksheet tabs created by Export Excel
When you look at the table, you’ll see that it has none of the familiar Excel spreadsheet formatting. I would like to add some formatting to my data. Let me show you how this can be done.
Exporting data with formatting
The Export-Excel cmdlet offers many options for formatting my data on export. I’ll highlight a few options, but make sure you review the parameters available for the Export-Excel cmdlet for a full list of formatting options.
I would like to export the data again. This time, however, I will add a table style and a title for my table, and I would like the table title to be bold. This is possible with Export-Excel. The code used to do this is slightly different from the previous example:
$People | Export-Excel c:tempExcelDemo.xlsx -Append -WorksheetName "PeopleFormatted" -TableStyle Medium16 -title "Demo of Table Formatting" -TitleBold
Formatted version of the People table in Excel
You might wonder what the table style I selected (Medium16) in the last example is. The Export-Excel cmdlet has table styles built in that correspond to the table styles you see in Excel.
Export Excel table styles available
The table styles in Excel are the same. In the screen cap below, I clicked on the «Format As Table» at the top of the spreadsheet, which then displays the table styles. If you hover your mouse over a style, you’ll see some text that provides you the style details. The #1 callout is the style I hovered over. Notice that it says Medium16. This is how I got the name that I used in my previous code example for the table style parameter.
Corresponding Excel table styles
Creating charts
Export-Excel does more than just make spreadsheets. The cmdlet can export table data and turn that data into a chart inside an Excel spreadsheet. For my next example, I have created a table of some simple inventory items and sales data.
Sales data
I would like to chart these sales in a simple bar graph that depicts units sold. To do this, I need to define the properties I want for my table. To do this, I use the New-ExcelChartDefinition cmdlet.
$ChartData = New-ExcelChartDefinition -XRange Item -YRange TotalSold -ChartType ColumnClustered -Title "Total Fruit Sales"
This line of code defines my table properties, and it tells Excel what to use for the xValue in the chart. I first use the Item column, then, I define the yValue (I am using the TotalSold column). Then, I specify a chart type. There are 69 chart types available in the cmdlet, all of which correspond to the chart types in Excel. I chose the «ColumnClustered» type for my example.
I then add a chart title, although this is not required. These values are saved to a variable named $ChartData. The next piece to add to the export cmdlet is this chart definition:
$data | Export-Excel C:tempExcelDemo.xlsx -Append -WorksheetName FruitSalesChart -ExcelChartDefinition $ChartData -AutoNameRange -show -Title "Fruit Sales"
Let’s walk through this example. First, I send the $data variable to the Export-Excel cmdlet. The $data variable is our sales data. The syntax for Export-Excel is a continuation from my previous example. I export and append this to a spreadsheet named «ExcelDemo.xlsx.» I create new worksheet tab named FruitSalesChart. This is all code we saw in the previous examples.
Then, I am add in the chart definition I created earlier by calling the $ChartData variable. Finally, I tell Excel that I want an auto name range. The -show parameter auto opens the spreadsheet after I create it.
Fruit Sales exported to Excel as a table and chart
Editing existing data in an Excel spreadsheet
I find it so easy to export data from PowerShell to Excel that I default to the Export-Excel cmdlet for much of my work. However, you can also update individual data values in an existing spreadsheet. I will connect to the spreadsheet that I used in the previous examples. To connect, use the Open-ExcelPackage cmdlet.
$ExcelPkg = Open-ExcelPackage -Path "C:tempExcelDemo.xlsx"
I can start to work with the data after opening the file.
Spreadsheet info in PowerShell
The first five rows constitute the worksheet tabs I created earlier in the spreadsheet. I can view the data in any of the tabs with some simple code.
#Let's access the data in the "PeopleFormatted" worksheet $WorkSheet = $ExcelPkg.Workbook.Worksheets["PeopleFormatted"].Cells $WorkSheet[3,1] | select value Value ----- Jeremy $WorkSheet[3,2] | select value Value ----- Loxahatchee
The code above probably doesn’t make much sense without a visual reference. Have a look at this screen cap below, which should help explain the code.
In the first code example, I called $WorkSheet[3,1] . If you look at the Excel spreadsheet, «3» represents the 3rd row. «1» represents the first column (starting from left of column A).
In the second code example, I called $WorkSheet[3,2] which is Row 3, Column2 (column B in spreadsheet).
Example of accessing Excel data values
Inserting a new value into the Excel data cell is done with a similar set of code. I will replace the name «Jeremy» with the name «Robert».
$WorkSheet[3,1].Value = "Robert" $WorkSheet[3,1] | select value Value ----- Robert
It’s that easy to update a field in Excel! However, there’s one catch. This change I just made is still in memory inside PowerShell. The file needs to «closed» for the data to be written back into the file.
Close-ExcelPackage $ExcelPkg
Updated spreadsheet value
Conclusion and links
Today, I showed you how to import data from an Excel spreadsheet, create a spreadsheet, create a simple chart, and manipulate the imported data in an existing Excel spreadsheet. The ImportExcel module makes these tasks and others operations simple to complete.
I have touched upon a just few of the many complex tasks you can perform with this module. If you would like to learn more, please visit Doug Finke’s GitHub page for many more examples of demo code you can try for yourself. He has a page dedicated to FAQs and a thorough analysis on examples that you should definitely check out.
Subscribe to 4sysops newsletter!
Many of the code examples in Doug’s module come from community members looking to use Excel in unique ways. If you have ideas for new ways to use his module, please submit a pull request to his repo so that others can learn from your use case.
PowerShell and Excel
Has the ImportExcel module helped you?
- Made you look good to the boss?
- Saved you time?
- Made you more productive?
Consider donating. Thank you!
Overview
Automate Excel with PowerShell without having Excel installed. Works on Windows, Linux and Mac. Creating Tables, Pivot Tables, Charts and much more just got a lot easier.
Examples ✨
Check out the more than 100 examples on ways to create amazing reports as well as make you more productive with PowerShell and Excel.
Basic Usage
Installation
Install-Module -Name ImportExcel
Create a spreadsheet
Here is a quick example that will create spreadsheet file from CSV data. Works with JSON, Databases, and more.
$data = ConvertFrom-Csv @" Region,State,Units,Price West,Texas,927,923.71 North,Tennessee,466,770.67 East,Florida,520,458.68 East,Maine,828,661.24 West,Virginia,465,053.58 North,Missouri,436,235.67 South,Kansas,214,992.47 North,North Dakota,789,640.72 South,Delaware,712,508.55 "@ $data | Export-Excel .salesData.xlsx
Read a spreadsheet
Quickly read a spreadsheet document into a PowerShell array.
$data = Import-Excel .salesData.xlsx $data
Region State Units Price ------ ----- ----- ----- West Texas 927 923.71 North Tennessee 466 770.67 East Florida 520 458.68 East Maine 828 661.24 West Virginia 465 053.58 North Missouri 436 235.67 South Kansas 214 992.47 North North Dakota 789 640.72 South Delaware 712 508.55
Add a chart to spreadsheet
Chart generation is as easy as 123. Building charts based on data in your worksheet doesn’t get any easier.
Plus, it is automated and repeatable.
$data = ConvertFrom-Csv @" Region,State,Units,Price West,Texas,927,923.71 North,Tennessee,466,770.67 East,Florida,520,458.68 East,Maine,828,661.24 West,Virginia,465,053.58 North,Missouri,436,235.67 South,Kansas,214,992.47 North,North Dakota,789,640.72 South,Delaware,712,508.55 "@ $chart = New-ExcelChartDefinition -XRange State -YRange Units -Title "Units by State" -NoLegend $data | Export-Excel .salesData.xlsx -AutoNameRange -ExcelChartDefinition $chart -Show
Add a pivot table to spreadsheet
Categorize, sort, filter, and summarize any amount data with pivot tables. Then add charts.
$data = ConvertFrom-Csv @" Region,State,Units,Price West,Texas,927,923.71 North,Tennessee,466,770.67 East,Florida,520,458.68 East,Maine,828,661.24 West,Virginia,465,053.58 North,Missouri,436,235.67 South,Kansas,214,992.47 North,North Dakota,789,640.72 South,Delaware,712,508.55 "@ $data | Export-Excel .salesData.xlsx -AutoNameRange -Show -PivotRows Region -PivotData @{'Units'='sum'} -PivotChartType PieExploded3D
Convert Excel data to other formats
Create a separate CSV file for each Excel sheet
Do you have an Excel file with multiple sheets and you need to convert each sheet to CSV file?
Problem Solved
The yearlyRetailSales.xlsx has 12 sheets of retail data for the year.
This single line of PowerShell converts any number of sheets in an Excel workbook to separate CSV files.
(Import-Excel .yearlyRetailSales.xlsx *).GetEnumerator() | ForEach-Object { $_.Value | Export-Csv ($_.key + '.csv') }
Additional Resources
Videos
- Export-Excel Hello World
- Make Excel Data Pop
- Slice And Dice Data
- Lightning talk — PowerShell Excel Module
More Videos
- Look smarter: deliver your work in Excel — James O’Neill @jamesoneill
- Module Monday: ImportExcel — Adam Driscoll @adamdriscoll
- Tutorials Excel Module Part 1
- Tutorials Excel Module Part 2
- Tutorials Excel Module Part 3
- PowerShell Excel — Invoke-ExcelQuery
- Powershell Excel — Data Validation
- Creating Dashboards xPlatform
Articles
Title | Author | |
---|---|---|
More tricks with PowerShell and Excel | James O’Neill | @jamesoneill |
Using the Import-Excel module: Part 1 Importing | James O’Neill | @jamesoneill |
Using the Import Excel module part 2: putting data into .XLSx files | James O’Neill | @jamesoneill |
Using the import Excel Module: Part 3, Pivots and charts, data and calculations | James O’Neill | @jamesoneill |
Export AdventureWorksDW2017 to Excel for a Power BI Demo with Export-Excel | Aaron Nelson | @sqlvariant |
Creating beautiful Powershell Reports in Excel | Doug Finke | @dfinke |
PowerShell Excel and Conditional Formatting | Doug Finke | @dfinke |
Learn to Automate Excel like a Pro with PowerShell | Doug Finke | @dfinke |
Contributing
Contributions are welcome! Open a pull request to fix a bug, or open an issue to discuss a new feature or change.
Original README.md
Microsoft Excel is one of those ubiquitous tools most of us can’t escape even if we tried. Many IT professionals use Excel as a little database storing tons of data in various automation routines. What’s the best scenario for automation and Excel? PowerShell and Excel!
Excel spreadsheets have always been notoriously hard to script and automate. Unlike its less-featured (and simpler) CSV file counterpart, Excel workbooks aren’t just simple text files. Excel workbooks required PowerShell to manipulate complicated Component Object Model (COM) objects thus you had to have Excel installed. Not anymore.
Thankfully, an astute PowerShell community member, Doug Finke, created a PowerShell module called ImportExcel for us mere mortals. The ImportExcel module abstracts away all of that complexity. It makes it possible to easily manage Excel workbooks and get down to PowerShell scripting!
In this article, let’s explore what you can do with PowerShell and Excel using the ImportExcel module and a few popular use cases.
Prerequisites
When running the ImportExcel module on a Windows system, no separate dependencies are necessary. However, if you’re working on macOS, you will need to install the mono-libgdiplus package using brew install mono-libgdiplus
. All examples in this article will be built using macOS but all examples should work cross-platform.
If you’re using macOS, be sure to restart your PowerShell session before continuing.
Installing the ImportExcel Module
Start by downloading and installing the module via the PowerShell Gallery by running Install-Module ImportExcel -Scope CurrentUser
. After a few moments, you’ll be good to go.
Using PowerShell and Excel to Export to a Worksheet
You may be familiar with the standard PowerShell cmdlets Export-Csv
and Import-Csv
. These cmdlets allow you to read and export PowerShell objects to CSV files. Unfortunately, there’s no Export-Excel
and Import-Excel
cmdlets. But using the ImportExcel module, you can build your own functionality.
One of the most common requests a sysadmin has is exporting PowerShell objects to an Excel worksheet. Using the Export-Excel
cmdlet in the ImportExcel module, you can easily make it happen.
For example, perhaps you need to find some processes running on your local computer and get them into an Excel workbook.
The
Export-Excel
cmdlet accepts any object exactly the wayExport-Csv
does. You can pipe any kind of object to this cmdlet.
To find processes running on a system with PowerShell, use the Get-Process
cmdlet which returns each running process and various information about each process. To export that information to Excel, use the Export-Excel
cmdlet providing the file path to the Excel workbook that will be created. You can see an example of the command and screenshot of the Excel file generated below.
Get-Process | Export-Excel -Path './processes.xlsx'
Congrats! You’ve now exported all the information just like Export-Csv
but, unlike Export-Csv
, we can make this data a lot fancier. Let’s make sure the worksheet name is called Processes, the data is in a table and rows are auto-sized.
By using the AutoSize
switch parameter to autosize all rows, TableName
to specify the name of the table that will include all the data and the WorksheetName
parameter name of Processes, you can see in the screenshot below what can be built.
Get-Process | Export-Excel -Path './processes.xlsx' -AutoSize -TableName Processes -WorksheetName Proccesses
The
Export-Excel
cmdlet has a ton of parameters you can use to create Excel workbooks of all kinds. For a full rundown on everythingExport-Excel
can do, runGet-Help Export-Excel
.
Using PowerShell to Import to Excel
So you’ve exported some information to a file called processes.xlsx in the previous section. Perhaps now you need to move this file to another computer and import/read this information with PowerShell and Excel. No problem. You have Import-Excel
at your disposal.
At its most basic usage, you only need to provide the path to the Excel document/workbook using the Path
parameter as shown below. You’ll see that it reads the first worksheet, in this case, the Processes worksheet, and returns PowerShell objects.
Import-Excel -Path './processes.xlsx'
Maybe you have multiple worksheets in an Excel workbook? You can read a particular worksheet using the WorksheetName
parameter.
Import-Excel -Path './processes.xlsx' -WorkSheetname SecondWorksheet
Do you need to only read certain columns from the Excel worksheet? Use the HeaderName
parameter to specify only those parameters you’d like to read.
Import-Excel -Path './processes.xlsx' -WorkSheetname Processes -HeaderName 'CPU','Handle'
The
Import-Excel
cmdlet has other parameters you can use to read Excel workbooks of all kinds. For a full rundown on everythingImport-Excel
can do, runGet-Help Import-Excel
.
Using PowerShell to Get (and Set) Excel Cell Values
You now know how to read an entire worksheet with PowerShell and Excel but what if you only need a single cell value? You technically could use Import-Excel
and filter out the value you need with Where-Object
but that wouldn’t be too efficient.
Instead, using the Open-ExcelPackage
cmdlet, you can “convert” an Excel workbook into a PowerShell object which can then be read and manipulated. To find a cell value, first, open up the Excel workbook to bring it into memory.
$excel = Open-ExcelPackage -Path './processes.xlsx'
The
Open-ExcelPackage
is similar to usingNew-Object -comobject excel.application
if working directly with COM objects.
Next, pick the worksheet inside of the workbook.
$worksheet = $excel.Workbook.Worksheets['Processes']
This process is similar to the COM object way of opening workbooks with
excel.workbooks.open
.
Once you have the worksheet assigned to a variable, you can now drill down to individual rows, columns, and cells. Perhaps you need to find all cell values in the A1 row. You simply need to reference the Cells
property providing an index of A1 as shown below.
$worksheet.Cells['A1'].Value
You can also change the value of cells in a worksheet by assigning a different value eg.
$worksheet.Cells['A1'] = 'differentvalue'
Once in memory, it’s important to release the Excel package using the Close-ExcelPackage
cmdlet.
Close-ExcelPackage $excel
Converting Worksheets to CSV Files with PowerShell and Excel
Once you have the contents of an Excel worksheet represented via PowerShell objects, “converting” Excel worksheets to CSV simply requires sending those objects to the Export-Csv
cmdlet.
Using the processes.xlsx workbook created earlier, read the first worksheet which gets all of the data into PowerShell objects, and then export those objects to CSV using the command below.
Import-Excel './processes.xlsx' | Export-Csv -Path './processes.csv' -NoTypeInformation
If you now open up the resulting CSV file, you’ll see the same data inside of the Processes worksheet (in this example).
Converting Multiple Worksheets
If you have an Excel workbook with multiple worksheets, you can also create a CSV file for each worksheet. To do so, you can find all the sheets in a workbook using the Get-ExcelSheetInfo
cmdlet. Once you have the worksheet names, you can then pass those names to the WorksheetName
parameter and also use the sheet name as the name of the CSV file.
Below you can the example code needed using PowerShell and Excel.
## find each sheet in the workbook
$sheets = (Get-ExcelSheetInfo -Path './processes.xlsx').Name
## read each sheet and create a CSV file with the same name
foreach ($sheet in $sheets) {
Import-Excel -WorksheetName $sheet -Path './processes.xlsx' | Export-Csv "./$sheet.csv" -NoTypeInformation
}
Conclusion
Using PowerShell and Excel, you can import, export, and manage data in Excel workbooks exactly like you would CSVs without having to install Excel!
In this article, you learned the basics of reading and writing data in an Excel workbook but this just scratches the surface. Using PowerShell and the ImportExcel module, you can create charts, pivot tables, and leverage other powerful features of Excel!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 |
function Export-Excel { <# .SYNOPSIS Exports data to an Excel worksheet. .DESCRIPTION Exports data to an Excel file and where possible tries to convert numbers in text fields so Excel recognizes them as numbers instead of text. After all: Excel is a spreadsheet program used for number manipulation and calculations. If number conversion is not desired, use the parameter -NoNumberConversion *. .PARAMETER Path Path to a new or existing .XLSX file. .PARAMETER ExcelPackage An object representing an Excel Package — usually this is returned by specifying -PassThru allowing multiple commands to work on the same workbook without saving and reloading each time. .PARAMETER WorksheetName The name of a sheet within the workbook — «Sheet1» by default. .PARAMETER ClearSheet If specified Export-Excel will remove any existing worksheet with the selected name. The Default behaviour is to overwrite cells in this sheet as needed (but leaving non-overwritten ones in place). .PARAMETER Append If specified data will be added to the end of an existing sheet, using the same column headings. .PARAMETER TargetData Data to insert onto the worksheet — this is usually provided from the pipeline. .PARAMETER DisplayPropertySet Many (but not all) objects have a hidden property named psStandardmembers with a child property DefaultDisplayPropertySet ; this parameter reduces the properties exported to those in this set. .PARAMETER NoAliasOrScriptPropeties Some objects duplicate existing properties by adding aliases, or have Script properties which take a long time to return a value and slow the export down, if specified this removes these properties .PARAMETER ExcludeProperty Specifies properties which may exist in the target data but should not be placed on the worksheet. .PARAMETER Calculate If specified a recalculation of the worksheet will be requested before saving. .PARAMETER Title Text of a title to be placed in the top left cell. .PARAMETER TitleBold Sets the title in boldface type. .PARAMETER TitleSize Sets the point size for the title. .PARAMETER TitleBackgroundColor Sets the cell background color for the title cell. .PARAMETER TitleFillPattern Sets the fill pattern for the title cell. .PARAMETER Password Sets password protection on the workbook. .PARAMETER IncludePivotTable Adds a PivotTable using the data in the worksheet. .PARAMETER PivotTableName If a PivotTable is created from command line parameters, specifies the name of the new sheet holding the pivot. Defaults to «WorksheetName-PivotTable». .PARAMETER PivotRows Name(s) of column(s) from the spreadsheet which will provide the Row name(s) in a PivotTable created from command line parameters. .PARAMETER PivotColumns Name(s) of columns from the spreadsheet which will provide the Column name(s) in a PivotTable created from command line parameters. .PARAMETER PivotFilter Name(s) columns from the spreadsheet which will provide the Filter name(s) in a PivotTable created from command line parameters. .PARAMETER PivotData In a PivotTable created from command line parameters, the fields to use in the table body are given as a Hash table in the form ColumnName = Average|Count|CountNums|Max|Min|Product|None|StdDev|StdDevP|Sum|Var|VarP. .PARAMETER PivotDataToColumn If there are multiple datasets in a PivotTable, by default they are shown as separate rows under the given row heading; this switch makes them separate columns. .PARAMETER NoTotalsInPivot In a PivotTable created from command line parameters, prevents the addition of totals to rows and columns. .PARAMETER PivotTotals By default, PivotTables have totals for each row (on the right) and for each column at the bottom. This allows just one or neither to be selected. .PARAMETER PivotTableDefinition Instead of describing a single PivotTable with multiple command-line parameters; you can use a HashTable in the form PivotTableName = Definition; Definition is itself a Hashtable with Sheet, PivotRows, PivotColumns, PivotData, IncludePivotChart and ChartType values. .PARAMETER IncludePivotChart Include a chart with the PivotTable — implies -IncludePivotTable. .PARAMETER ChartType The type for PivotChart (one of Excel’s defined chart types). .PARAMETER NoLegend Exclude the legend from the PivotChart. .PARAMETER ShowCategory Add category labels to the PivotChart. .PARAMETER ShowPercent Add percentage labels to the PivotChart. .PARAMETER ConditionalFormat One or more conditional formatting rules defined with New-ConditionalFormattingIconSet. .PARAMETER ConditionalText Applies a Conditional formatting rule defined with New-ConditionalText. When specific conditions are met the format is applied. .PARAMETER NoNumberConversion By default we convert all values to numbers if possible, but this isn’t always desirable. NoNumberConversion allows you to add exceptions for the conversion. Wildcards (like ‘*’) are allowed. .PARAMETER BoldTopRow Makes the top row boldface. .PARAMETER NoHeader Does not put field names at the top of columns. .PARAMETER RangeName Makes the data in the worksheet a named range. .PARAMETER TableName Makes the data in the worksheet a table with a name, and applies a style to it. Name must not contain spaces. .PARAMETER TableStyle Selects the style for the named table — defaults to ‘Medium6’. .PARAMETER BarChart Creates a «quick» bar chart using the first text column as labels and the first numeric column as values .PARAMETER ColumnChart Creates a «quick» column chart using the first text column as labels and the first numeric column as values .PARAMETER LineChart Creates a «quick» line chart using the first text column as labels and the first numeric column as values .PARAMETER PieChart Creates a «quick» pie chart using the first text column as labels and the first numeric column as values .PARAMETER ExcelChartDefinition A hash table containing ChartType, Title, NoLegend, ShowCategory, ShowPercent, Yrange, Xrange and SeriesHeader for one or more [non-Pivot] charts. .PARAMETER HideSheet Name(s) of Sheet(s) to hide in the workbook, supports wildcards. If the selection would cause all sheets to be hidden, the sheet being worked on will be revealed. .PARAMETER UnHideSheet Name(s) of Sheet(s) to reveal in the workbook, supports wildcards. .PARAMETER MoveToStart If specified, the worksheet will be moved to the start of the workbook. -MoveToStart takes precedence over -MoveToEnd, -Movebefore and -MoveAfter if more than one is specified. .PARAMETER MoveToEnd If specified, the worksheet will be moved to the end of the workbook. (This is the default position for newly created sheets, but this can be used to move existing sheets.) .PARAMETER MoveBefore If specified, the worksheet will be moved before the nominated one (which can be a position starting from 1, or a name). -MoveBefore takes precedence over -MoveAfter if both are specified. .PARAMETER MoveAfter If specified, the worksheet will be moved after the nominated one (which can be a position starting from 1, or a name or *). If * is used, the worksheet names will be examined starting with the first one, and the sheet placed after the last sheet which comes before it alphabetically. .PARAMETER KillExcel Closes Excel — prevents errors writing to the file because Excel has it open. .PARAMETER AutoNameRange Makes each column a named range. .PARAMETER StartRow Row to start adding data. 1 by default. Row 1 will contain the title if any. Then headers will appear (Unless -No header is specified) then the data appears. .PARAMETER StartColumn Column to start adding data — 1 by default. .PARAMETER FreezeTopRow Freezes headers etc. in the top row. .PARAMETER FreezeFirstColumn Freezes titles etc. in the left column. .PARAMETER FreezeTopRowFirstColumn Freezes top row and left column (equivalent to Freeze pane 2,2 ). .PARAMETER FreezePane Freezes panes at specified coordinates (in the form RowNumber, ColumnNumber). .PARAMETER AutoFilter Enables the Excel filter on the complete header row, so users can easily sort, filter and/or search the data in the selected column. .PARAMETER AutoSize Sizes the width of the Excel column to the maximum width needed to display all the containing data in that cell. .PARAMETER MaxAutoSizeRows Autosizing can be time consuming, so this sets a maximum number of rows to look at for the Autosize operation. Default is 1000; If 0 is specified ALL rows will be checked .PARAMETER Activate If there is already content in the workbook, a new sheet will not be active UNLESS Activate is specified; if a PivotTable is included it will be the active sheet .PARAMETER Now The -Now switch is a shortcut that automatically creates a temporary file, enables «AutoSize», «AutoFiler» and «Show», and opens the file immediately. .PARAMETER NumberFormat Formats all values that can be converted to a number to the format specified.
[CmdletBinding(DefaultParameterSetName = ‘Default’)] [OutputType([OfficeOpenXml.ExcelPackage])] [Diagnostics.CodeAnalysis.SuppressMessageAttribute(«PSAvoidUsingPlainTextForPassword», «»)] Param( [Parameter(ParameterSetName = «Default», Position = 0)] [Parameter(ParameterSetName = «Table» , Position = 0)] [String]$Path, [Parameter(Mandatory = $true, ParameterSetName = «PackageDefault»)] [Parameter(Mandatory = $true, ParameterSetName = «PackageTable»)] [OfficeOpenXml.ExcelPackage]$ExcelPackage, [Parameter(ValueFromPipeline = $true)] [Alias(‘TargetData’)] $InputObject, [Switch]$Calculate, [Switch]$Show, [String]$WorksheetName = ‘Sheet1’, [String]$Password, [switch]$ClearSheet, [switch]$Append, [String]$Title, [OfficeOpenXml.Style.ExcelFillStyle]$TitleFillPattern = ‘Solid’, [Switch]$TitleBold, [Int]$TitleSize = 22, $TitleBackgroundColor, [Switch]$IncludePivotTable, [String]$PivotTableName, [String[]]$PivotRows, [String[]]$PivotColumns, $PivotData, [String[]]$PivotFilter, [Switch]$PivotDataToColumn, [Hashtable]$PivotTableDefinition, [Switch]$IncludePivotChart, [OfficeOpenXml.Drawing.Chart.eChartType]$ChartType = ‘Pie’, [Switch]$NoLegend, [Switch]$ShowCategory, [Switch]$ShowPercent, [Switch]$AutoSize, $MaxAutoSizeRows = 1000, [Switch]$NoClobber, [Switch]$FreezeTopRow, [Switch]$FreezeFirstColumn, [Switch]$FreezeTopRowFirstColumn, [Int[]]$FreezePane, [Parameter(ParameterSetName = ‘Default’)] [Parameter(ParameterSetName = ‘PackageDefault’)] [Switch]$AutoFilter, [Switch]$BoldTopRow, [Switch]$NoHeader, [ValidateScript( { if (-not $_) { throw ‘RangeName is null or empty.’ } elseif ($_[0] -notmatch ‘[a-z]’) { throw ‘RangeName starts with an invalid character.’ } else { $true } })] [String]$RangeName, [ValidateScript( { if (-not $_) { throw ‘Tablename is null or empty.’ } elseif ($_[0] -notmatch ‘[a-z]’) { throw ‘Tablename starts with an invalid character.’ } else { $true } })] [Parameter(ParameterSetName = ‘Table’ , Mandatory = $true, ValueFromPipelineByPropertyName)] [Parameter(ParameterSetName = ‘PackageTable’ , Mandatory = $true, ValueFromPipelineByPropertyName)] [String]$TableName, [Parameter(ParameterSetName = ‘Table’)] [Parameter(ParameterSetName = ‘PackageTable’)] [OfficeOpenXml.Table.TableStyles]$TableStyle, [Switch]$Barchart, [Switch]$PieChart, [Switch]$LineChart , [Switch]$ColumnChart , [Object[]]$ExcelChartDefinition, [String[]]$HideSheet, [String[]]$UnHideSheet, [Switch]$MoveToStart, [Switch]$MoveToEnd, $MoveBefore , $MoveAfter , [Switch]$KillExcel, [Switch]$AutoNameRange, [Int]$StartRow = 1, [Int]$StartColumn = 1, [Switch]$PassThru, [String]$Numberformat = ‘General’, [string[]]$ExcludeProperty, [Switch]$NoAliasOrScriptPropeties, [Switch]$DisplayPropertySet, [String[]]$NoNumberConversion, [Object[]]$ConditionalFormat, [Object[]]$ConditionalText, [ScriptBlock]$CellStyleSB, #If there is already content in the workbook the sheet with the PivotTable will not be active UNLESS Activate is specified [switch]$Activate, [Parameter(ParameterSetName = ‘Now’)] [Switch]$Now, [Switch]$ReturnRange, #By default PivotTables have Totals for each Row (on the right) and for each column at the bottom. This allows just one or neither to be selected. [ValidateSet(«Both»,«Columns»,«Rows»,«None»)] [String]$PivotTotals = «Both», #Included for compatibility — equivalent to -PivotTotals «None» [Switch]$NoTotalsInPivot, [Switch]$ReZip ) begin { #if we did not get a table name but there is a table which covers the active part of the sheet, set table name to that, and don’t do anything with autofilter $row = $ws.Dimension.End.Row if ($PSBoundParameters.ContainsKey(«TitleBold»)) { process { if ($PSBoundParameters.ContainsKey(«InputObject»)) { } }} end { Write-Debug «Data Range ‘$dataRange'» #Dimension.start.row always seems to be one so we work out the target row if ($TableName) { if ($AutoFilter) { if ($PivotTableDefinition) { Add-PivotTable -ExcelPackage $pkg -PivotTableName $item.key @Params if ($PivotTableName) {$params.PivotTableName = $PivotTableName} try { if ($freezeRow -ge 1) { if ($PSBoundParameters.ContainsKey(«BoldTopRow»)) { #it sets bold as far as there are populated cells: for whole row could do $ws.row($x).style.font.bold = $true foreach ($Sheet in $HideSheet) { foreach ($chartDef in $ExcelChartDefinition) { if ($Calculate) { if ($Barchart -or $PieChart -or $LineChart -or $ColumnChart) { Add-ExcelChart -Worksheet $ws @params # It now doesn’t matter if the conditional formating rules are passed in $conditionalText or $conditional format. if ($CellStyleSB) { #Can only add password, may want to support -password $Null removing password. catch {throw «Failed setting password for worksheet ‘$WorksheetName’: $_»} if ($PassThru) { $pkg } if ($Password) { $pkg.Save($Password) } $pkg.Dispose() if ($Show) { Invoke-Item $Path } } function Add-WorkSheet {
# If WorksheetName was given, try to use that worksheet. If it wasn’t, and we are copying an existing sheet, try to use the sheet name #If -clearsheet was specified and the named sheet exists, delete it #Copy or create new sheet as needed function Select-Worksheet { Function Add-ExcelName { function Add-ExcelTable {
if ($PassThru) {return $tbl} |