Compare commits

...

815 Commits

Author SHA1 Message Date
dfinke
3a4c2d7bd9 bump version 2021-11-20 16:18:12 -05:00
dfinke
42cb5a316a update changelog 2021-11-20 16:18:05 -05:00
dfinke
536cdaa841 tweaked spelling 2021-11-20 15:53:23 -05:00
Doug Finke
6cd9fad7ba Merge pull request #1106 from royashbrook/CI-Updates
Add ACE into testing pipeline
2021-11-20 15:44:13 -05:00
Doug Finke
829d854c3d Merge pull request #1102 from muschebubusche/AddSelectiveColumnImport
Add selective column import
2021-11-20 15:36:05 -05:00
muschebubusche
b33a282740 Add new pester test 2021-11-20 16:51:49 +01:00
muschebubusche
73fc96166c Refactor selective column import
Move code into the function Get-PropertyNames and remove the rest.
Now it only replaces $Columns with $ImportColumns after a couple of checks. So the heavy work like arranging and getting the right values is done in the original way of Import-Excel.
2021-11-20 16:51:40 +01:00
Roy Ashbrook
00f7278115 add back *nix tests 2021-11-16 16:28:03 -05:00
Roy Ashbrook
956cf5aa49 fix 2021-11-16 16:23:54 -05:00
Roy Ashbrook
877310e015 add back pscore 2021-11-16 16:20:59 -05:00
Roy Ashbrook
08bf877535 add back in normal win testing 2021-11-16 16:11:32 -05:00
Roy Ashbrook
88e28a1d6c change path 2021-11-16 16:05:33 -05:00
Roy Ashbrook
eb63fe259a testing caching 2021-11-16 16:02:19 -05:00
Roy Ashbrook
6d97efc5c2 fun with curl... maybe 2021-11-16 15:43:57 -05:00
Roy Ashbrook
c567526eac testing caching 2021-11-16 15:34:36 -05:00
Roy Ashbrook
ed210cc730 testing 2021-11-16 15:29:32 -05:00
Roy Ashbrook
72f44ebcb9 trying a folder 2021-11-16 15:18:37 -05:00
Roy Ashbrook
f1d20ed163 test pipeline cache 2021-11-16 15:13:52 -05:00
Roy Ashbrook
02cf6bb3f3 test ace 2021-11-16 09:03:53 -05:00
dfinke
5cd3897dfa fix png 2021-11-12 19:26:57 -05:00
dfinke
fe4f2848ad bump version 2021-11-12 19:23:36 -05:00
dfinke
4e89b3321a update change log 2021-11-12 19:23:31 -05:00
Doug Finke
43b6ebf84f Merge pull request #1101 from royashbrook/Read-OleDbData
Add ability to query with Oledb
2021-11-12 18:59:41 -05:00
dfinke
1ee9493bc0 Minor tweak. Display query executed 2021-11-12 17:25:45 -05:00
muschebubusche
8f0fc7397d Add example and automatic column arrangement
Add example and automatic column arrangement
2021-11-09 22:40:40 +01:00
Roy Ashbrook
4fa6fbda01 update warning msg for Read-OleDbData 2021-11-09 09:05:15 -05:00
Roy Ashbrook
7177623104 add silent continue to cmd check tests 2021-11-08 18:21:11 -05:00
Roy Ashbrook
487cf51abc fix test skip label name 2021-11-08 18:19:23 -05:00
Roy Ashbrook
ae31e9d39b update skip/help msgs in invoke cmd 2021-11-08 18:08:45 -05:00
Roy Ashbrook
9ba20b8ec8 add back invoke tests, sync skip methods 2021-11-08 17:57:44 -05:00
Roy Ashbrook
9daefc2925 fix typo in skip logic 2021-11-08 17:45:33 -05:00
Roy Ashbrook
f0b4cb28f6 update tests to skip other pre-checks if linux/mac 2021-11-08 17:44:03 -05:00
Roy Ashbrook
5f00f5cbbc update tests 2021-11-08 17:40:33 -05:00
Roy Ashbrook
d41fbf8a05 updating tests 2021-11-08 17:13:40 -05:00
Roy Ashbrook
ebe49f1650 fix or/and 2021-11-08 16:56:23 -05:00
Roy Ashbrook
a3dced10e4 update tests 2021-11-08 16:37:00 -05:00
Roy Ashbrook
1e522c562b test skips for linux/macos, switch to warnings 2021-11-08 16:00:06 -05:00
Roy Ashbrook
5ec299ff2d some debugging messages for troubleshooting CI 2021-11-08 15:43:36 -05:00
Roy Ashbrook
676ecc17e0 update tests to match 2021-11-08 15:25:26 -05:00
Roy Ashbrook
aa1b0018ab Add examples 2021-11-08 15:14:46 -05:00
Roy Ashbrook
eabaab79c5 add ace check 2021-11-08 14:43:57 -05:00
Roy Ashbrook
7a8bbb9771 add to exported functions, formatting, fix typo. 2021-11-04 20:54:51 -04:00
Roy Ashbrook
85f2433ffc Rename helper function to make it more helpful. =) 2021-11-04 10:44:14 -04:00
muschebubusche
62c8d74a59 Add selective column import 2021-11-03 23:15:18 +01:00
Roy Ashbrook
5e7b404daf Add helper method 2021-11-03 10:35:22 -04:00
Roy Ashbrook
91a1240408 add skip test check for ace 2021-10-30 11:20:27 -04:00
Roy Ashbrook
e8c3d96f43 Tests relocated and updated. All passing. 2021-10-29 21:58:05 -04:00
Roy Ashbrook
9417b25af1 move tests into test folder 2021-10-29 16:58:16 -04:00
Roy Ashbrook
a942f2133d Add basic function, tests, and sample file 2021-10-29 13:21:52 -04:00
Doug Finke
533ed07ac8 Remove lowercase public
used for GitBook, no longer needed. #1082
2021-09-17 08:07:56 -04:00
Doug Finke
09f35b5fd5 Merge pull request #1078 from dfinke/Add-Checks-And-Warnings-for-Add-Member-Open-Excel-Package
Add-Checks-And-Warnings-for-Add-Member-Open-Excel-Package
2021-09-14 18:15:47 -04:00
dfinke
23a2ac394f Add try/catch, warning, and tests 2021-09-14 15:44:32 -04:00
dfinke
50928e8e3b Update 2021-09-14 15:44:11 -04:00
dfinke
26827b0764 bump version 2021-09-14 15:44:03 -04:00
Doug Finke
6c35d5b018 Updated 2021-09-10 18:41:03 -04:00
Doug Finke
ab5600c9ba bump version 2021-09-10 18:40:57 -04:00
Doug Finke
47dcc636d9 Merge pull request #1077 from stahler/Open-ExcelPackage
Update open-excelpackage.md
2021-09-10 18:39:00 -04:00
Stahler
1768c0ac92 Update open-excelpackage.md 2021-09-10 14:17:44 -04:00
Doug Finke
694fcdd8c1 Merge pull request #1059 from dfinke/add-test-for-ps-5-to-7-and-linux
Improved checks for Linux, Mac and PS 5.1 - #1056, #1057
2021-07-30 19:27:06 -04:00
dfinke
0192f4d822 Improved checks for Linux, Mac and PS 5.1 - #1056, #1057 2021-07-30 19:21:37 -04:00
dfinke
c641eea10a Improve auto-detection of data on the clipboard 2021-07-24 19:41:57 -04:00
dfinke
99de9a9854 Pass parameters from Read-Clipboard to implementation 2021-07-24 13:48:18 -04:00
Doug Finke
3121c5eaed Merge pull request #1054 from dfinke/Add-new-function-Read-Clipboard
Added Read-Clipboard
2021-07-24 13:37:32 -04:00
dfinke
d02f757568 add change log 2021-07-24 13:26:06 -04:00
dfinke
a693725949 Add Tests 2021-07-24 13:01:51 -04:00
dfinke
5e19d0ca1a Add ReadClipboardImpl function 2021-07-24 13:01:48 -04:00
dfinke
204b82144f Refactor for testing 2021-07-24 13:01:32 -04:00
dfinke
91eefbd48b Added Read-Clipboard 2021-07-24 11:20:04 -04:00
dfinke
f86556a89d Updated, added Open in VS Code badge 2021-07-10 08:46:36 -04:00
dfinke
14e1dfd8db Bump version. Use ProviderPath 2021-06-20 12:11:14 -04:00
Doug Finke
1d961c679e Merge pull request #1031 from sporkabob/master
Fix UNC paths for ConvertFrom-ExcelSheet
2021-05-13 15:54:39 -04:00
sporkabob
7026803415 Fix UNC paths for ConvertFrom-ExcelSheet 2021-05-13 15:22:15 -04:00
Doug Finke
e486135c4f Merge pull request #1029 from MikeyBronowski/patch-2
Removed duplicate entry for the version
2021-05-08 19:05:55 -04:00
Mikey Bronowski
80d9cb1290 Removed duplicate entry for the version
The What's new for 7.1.2 starts at line 58
2021-05-08 23:43:42 +01:00
dfinke
d82c01eabf Updated readme #1014 2021-04-06 20:22:55 -04:00
dfinke
2fcb7a57a2 tweak tests for path returned #1014 2021-04-06 19:37:07 -04:00
dfinke
afe7e545f6 Add unit tests for Get-ExcelFileSummary #1014 2021-04-06 19:32:37 -04:00
dfinke
88638a87a9 Added Get-ExcelFileSummary 2021-02-28 15:59:42 -05:00
Doug Finke
0f354be443 Merge pull request #998 from DarkLite1/master
Added example for exporting data to Excel for Pester 5.1
2021-02-12 09:54:32 -05:00
DarkLite1
abebb9af11 Added example for exporting data to Excel for Pester 5.1 2021-02-12 13:21:59 +01:00
dfinke
d8ae8b1abc change to testdrive 2021-02-07 11:19:43 -05:00
dfinke
30fc53857d Swapped out Get-CimInstance tests 2021-02-07 11:14:08 -05:00
dfinke
04b7895d1e Remove .gitbook 2020-11-28 11:41:44 -05:00
Doug Finke
7f72aa9e86 GitBook: [master] 133 pages and 8 assets modified 2020-11-28 13:13:00 +00:00
Doug Finke
70ab9e46c7 Merge pull request #959 from MikeyBronowski/ExampleDatabar
Example: Removed a duplicate parameter Range/Address
2020-11-27 12:47:24 -05:00
MikeyBronowski
49e355b702 Removed a duplicate parameter Range/Address 2020-11-24 22:24:40 +00:00
Doug Finke
82a8536e47 Merge pull request #954 from jhoneill/master
Fixed the pester issues. (Locally and in AzDo pipelines)
2020-11-23 18:38:51 -05:00
dfinke
35246d51e7 Remove -MaximumVersion 4.99.99 2020-11-23 18:33:17 -05:00
jhoneill
9dafe170f1 Suppress bogus analyzer warnings. 2020-11-23 09:34:14 +00:00
jhoneill
0d29fd813d Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2020-11-23 09:27:54 +00:00
jhoneill
c685ad767c More pester fixing 2020-11-23 09:27:14 +00:00
jhoneill
f283ada708 More pester fixing 2020-11-23 09:12:50 +00:00
jhoneill
bb3923aabf Merge remote-tracking branch 'upstream/master' 2020-11-23 00:43:11 +00:00
Doug Finke
fa0b3ca79b Update Multiplecharts.md 2020-11-13 18:52:53 -05:00
Doug Finke
53f8acda90 Update Multiplecharts.md 2020-11-13 18:50:27 -05:00
Doug Finke
ca586fc2d5 Update Multiplecharts.md 2020-11-13 18:50:14 -05:00
Doug Finke
4c5f1a967e Update Multiplecharts.md 2020-11-13 18:49:58 -05:00
dfinke
f237861e1a added md and png 2020-11-13 18:49:14 -05:00
jhoneill
282d650072 De-skipped some tests. Fixed a tiny bug in Add-Conditional formatting. 2020-11-02 18:01:23 +00:00
dfinke
6149442bc0 First pass. All code must be in a script block 2020-10-31 17:47:07 -04:00
Doug Finke
113bf2c95c Merge pull request #908 from SQLvariant/small-typo
Update ImportExcel-help.xml
2020-08-28 09:11:45 -04:00
Aaron Nelson
27e8130e6c Update ImportExcel-help.xml
Corrected the location of the period.
2020-08-28 08:07:41 -04:00
Doug Finke
c19e219a44 Update README.md 2020-07-11 18:38:54 -04:00
dfinke
795b2017b5 Update readme 2020-07-11 18:20:50 -04:00
Doug Finke
cb749dff07 Merge pull request #835 from scrthq:hotfix/issue_832
fixes #832
2020-07-11 17:49:54 -04:00
dfinke
fd6b847d77 update readme 2020-07-03 12:11:59 -04:00
dfinke
c6d9104d52 Merge branch 'master' of https://github.com/dfinke/ImportExcel 2020-07-03 12:10:34 -04:00
Doug Finke
df157b22ab Merge pull request #885 from MikeyBronowski/Examples1
Standardise examples: loading module + file cleanup
2020-07-03 11:39:52 -04:00
MikeyBronowski
95822ac2e9 Standardise file cleanup 2020-07-01 22:19:42 +02:00
MikeyBronowski
c4d20a9a28 Standardise file cleanup 2020-07-01 22:10:00 +02:00
MikeyBronowski
8a20963577 Standardising examples 2020-07-01 22:04:37 +02:00
dfinke
c30e03a47f updated 2020-06-26 19:38:55 -04:00
Doug Finke
0a77a83e35 Merge pull request #875 from MikeyBronowski/VariableCasing
Variable casing
2020-06-26 19:30:00 -04:00
MikeyBronowski
66f6a5fa0b typo 2020-06-21 22:53:35 +02:00
MikeyBronowski
a3921f5298 Parameters with casing not following standard 2020-06-21 22:34:46 +02:00
dfinke
1823f1dde0 updated readme 2020-06-20 17:44:46 -04:00
Doug Finke
5d5ca57f4b Merge pull request #873 from MikeyBronowski:VariableCasing
Standardising casing of parameter names
2020-06-20 17:36:27 -04:00
MikeyBronowski
11d591aad6 Standardising casing of parameter names 2020-06-20 23:03:27 +02:00
dfinke
9841ef9436 delete appveyor.yml, update badges in readme 2020-05-24 12:23:22 -04:00
dfinke
ae1fa04334 stop appveyor builds 2020-05-24 12:14:41 -04:00
dfinke
a7861ee57d bump version, update readme 2020-05-24 11:50:19 -04:00
Doug Finke
24ca7a4d86 Merge pull request #856 from dfinke/dfinke/issue855
Dfinke/issue855
2020-05-24 11:20:52 -04:00
dfinke
51b23323fa Scrub invalid chars from the filename 2020-05-24 10:59:57 -04:00
dfinke
001aabf526 Added synopsis, and tests the value is a scriptblock 2020-05-23 17:32:22 -04:00
dfinke
a5a98d5c92 Used to drive the Export-MultipleExcelSheets 2020-05-23 17:32:03 -04:00
dfinke
070d40b5af Move to Examples/Experimental 2020-05-23 17:10:54 -04:00
dfinke
c4b3556c5d Don't source the Export-Multiplesheets ps1 2020-05-23 17:06:45 -04:00
dfinke
8151ed4305 Remove help file 2020-05-23 17:06:12 -04:00
Nate Ferrell
6959cffa24 added ImportOnly test and added additional macOS stage on azure-pipelines.yml 2020-05-05 02:22:53 -05:00
Nate Ferrell
6be2195680 Merge remote-tracking branch 'upstream/master' into hotfix/issue_832 2020-05-05 02:21:00 -05:00
Doug Finke
ff77606430 Merge pull request #837 from dfinke/UpdatePesterInstall
Prevent install of Pester v5
2020-05-04 18:52:27 -04:00
dfinke
a874e1385e Prevent install of Pester v5 2020-05-04 09:43:19 -04:00
dfinke
f8b9cf7251 Add Stale bot config 2020-05-03 14:58:02 -04:00
dfinke
5588c0306c added custom formatting example 2020-05-02 16:47:36 -04:00
Nate Ferrell
359f7453c5 fixes #832 2020-05-01 13:34:46 -05:00
dfinke
933abf6539 Tweaked format 2020-03-16 13:39:03 -04:00
dfinke
6a32da7f92 update readme 2020-03-16 13:34:31 -04:00
dfinke
c3ac68ea2c bump version 2020-03-16 13:34:05 -04:00
Doug Finke
5ea9b1d082 Merge pull request #803 from jhoneill/master
fix #802 and #795. Extra examples including pester-xlsx
2020-03-16 12:50:52 -04:00
jhoneill
ae64a884fc Put back asDate lost in merge 2020-03-16 12:10:51 +00:00
jhoneill
b584b22f5f Merge remote-tracking branch 'upstream/master' 2020-03-16 11:43:10 +00:00
jhoneill
eb3a7d3f2d Allow 0 or false to be a column heading 2020-03-16 11:15:40 +00:00
jhoneill
3130020e20 apply freeze to 2 rows if title present #795 2020-03-16 11:10:44 +00:00
jhoneill
fe68ddbb0d New examples incl. Pester to XLSx 2020-03-16 11:07:30 +00:00
Doug Finke
1ce65a0758 Merge pull request #793 from dfinke/FixSheetHasOnlyHeaders
Spike to fix #792
2020-03-01 08:04:45 -05:00
dfinke
13454cce8e Spike to fix #792 2020-02-29 15:55:49 -05:00
Doug Finke
96b61d38f1 Merge pull request #783 from clsmith70/patch-2
Create MultipleWorksheets.ps1
2020-02-18 09:09:41 -05:00
Chris Smith
59e31d54a7 Move to /Examples/CommunityContributions Folder 2020-02-18 09:02:49 -05:00
Chris Smith
6bf16f75f7 Create MultipleWorksheets.ps1
The PS commands to create an Excel file with multiple worksheets and adding one using ExcelPackage functions.
2020-02-16 16:37:27 -05:00
Doug Finke
c547713ee9 Merge pull request #782 from JustinGrote/patch-1
Remove Write-Debug Performance Outputs
2020-02-15 07:13:39 -05:00
Justin Grote
f0ec5f4a96 Remove Write-Debug Performance Outputs
These outputs are unnecessary and can confuse someone observing other debug output.
2020-02-14 14:49:07 -08:00
Doug Finke
7ded94e225 Merge pull request #775 from stahler/master
Update help for GroupDateRow parameter. Thanks for the update Wes (@stahler)!
2020-02-11 18:25:01 -05:00
Wes Stahler
4141ba690e Update New-PivotTableDefinition.md 2020-02-11 08:39:24 -05:00
Wes Stahler
08ecadddb2 Merge pull request #1 from dfinke/master
Update
2020-02-11 08:24:41 -05:00
dfinke
e42f42fde9 Add VLookup 2020-02-03 20:19:57 -05:00
dfinke
12fa49e314 Rename directory 2020-02-03 20:11:49 -05:00
dfinke
98ce564929 Add Excel builtin DSUM Example 2020-02-01 11:55:33 -05:00
jhoneill
7e75ecd0fb Add Subtotals & Groups example 2019-12-31 22:32:34 +00:00
jhoneill
17ec040055 fix message in merge, improve pester example 2019-12-31 19:38:28 +00:00
jhoneill
e65210e378 Fix test not working with single digit dates. 2019-12-31 02:48:57 +00:00
jhoneill
7bfb28d10f Update Pester Syntax from V3 to V4 (V5 won't support the old version) 2019-12-29 17:18:24 +00:00
jhoneill
08fbfc35a3 Add Pester example. Make Hide and Hidden aliases 2019-12-28 21:16:01 +00:00
jhoneill
4315ddc702 Merge branch 'master' of https://github.com/dfinke/ImportExcel 2019-12-22 18:38:12 +00:00
jhoneill
97611fc57c Add -AsDate support to import-Excel and ConvertFrom-Excel sheet. Help upate 2019-12-22 18:04:42 +00:00
jhoneill
118330ea47 Make primary name "PivotTableChartType" (with alias chartType) in Export-Excel 2019-12-22 16:39:38 +00:00
jhoneill
6f48219819 assume IncludePivot when implied by other params 2019-12-22 14:52:06 +00:00
dfinke
9d1a544e77 Updated 2019-12-21 11:46:05 -05:00
Doug Finke
e836928571 Merge pull request #755 from jhoneill/master
Latest updates
2019-12-21 11:10:52 -05:00
jhoneill
718bf951b7 Fix String typos. Fix missing space merge-multiple column names 2019-12-19 18:37:41 +00:00
jhoneill
08dd30696e fix convertFrom-ExcelSheet test - date format issue 2019-12-15 23:34:55 +00:00
jhoneill
7b51d2f340 retry 2019-12-15 22:54:31 +00:00
jhoneill
b3932f0a13 retry 2019-12-15 22:50:26 +00:00
jhoneill
84140d757a #737 #741, #746 & Tests 2019-12-15 22:36:31 +00:00
jhoneill
ce8a070673 Remove debugging messages from CI pipeline 2019-12-09 00:45:34 +00:00
jhoneill
ed41c20f63 Finalize Checks for failing manfiest 2019-12-09 00:42:44 +00:00
jhoneill
28e3fe1cd8 again 2019-12-09 00:32:47 +00:00
jhoneill
ed7f43bab3 retry 2019-12-09 00:30:01 +00:00
jhoneill
f695e7cc63 retry previous 2019-12-09 00:24:56 +00:00
jhoneill
5757302a6e fix CI copy issue 2019-12-09 00:07:36 +00:00
jhoneill
8ccf2799e1 go back to reading settings directly 2019-12-08 23:30:20 +00:00
jhoneill
c9116c2d18 Add manifest check to tests 2019-12-08 22:54:18 +00:00
jhoneill
88e0a449c7 Fix case error for CI.ps1 on Linux 2019-12-08 13:16:54 +00:00
jhoneill
65754d27cc reinstate loading from private post-merge 2019-12-08 12:56:54 +00:00
jhoneill
3e10d03b62 Merge branch 'master' of https://github.com/dfinke/ImportExcel into refactor 2019-12-08 12:46:15 +00:00
jhoneill
1be2f82456 fix check not detecting commented alias 2019-12-08 12:04:33 +00:00
jhoneill
86f13e1d6f refine pipeline (remove typo) 2019-12-08 11:08:43 +00:00
jhoneill
40a50ad78b Refine CI Pipeline (retry) 2019-12-08 11:06:17 +00:00
jhoneill
5220e7c188 retry previous 2019-12-08 10:54:19 +00:00
jhoneill
d45d90c8a1 Retry previous 2019-12-08 10:22:35 +00:00
jhoneill
f5a29b45df retry previous 2019-12-08 10:19:21 +00:00
jhoneill
fb4fb57751 refine the pipeline 2019-12-08 10:12:33 +00:00
jhoneill
300960fd9b remove more aliases from examples 2019-12-08 02:19:56 +00:00
jhoneill
2e56012408 retry 2 2019-12-08 01:52:25 +00:00
jhoneill
4f17fc36bc retry 2019-12-08 01:50:54 +00:00
jhoneill
6be0961d17 Improve Artifacts 2019-12-08 01:47:43 +00:00
jhoneill
2bcb332ec7 try better script analysis publishing 2019-12-08 01:35:13 +00:00
jhoneill
469586e94a retry previous 2019-12-08 01:26:21 +00:00
jhoneill
a9b1a128cd Refine Pipeline messages / script analysis 2019-12-08 01:24:22 +00:00
jhoneill
dec579a966 update CI for moved install.ps1 2019-12-08 00:58:22 +00:00
jhoneill
ce4270babd experiment with new Azure pipeline 2019-12-08 00:53:56 +00:00
jhoneill
d83a468fa9 More file moves 2019-12-08 00:45:47 +00:00
dfinke
9b385e72c6 Fix - The specified FileList entry '.\Private' in the module manifest 'ImportExcel.psd1' is invalid. 2019-12-07 11:15:35 -05:00
dfinke
4fee745a7f Fix brace 2019-12-07 11:05:42 -05:00
dfinke
8b5fa9e798 Updated msg for Autosize on Linux 2019-12-07 10:59:34 -05:00
dfinke
4608c0bd04 updated 2019-12-05 18:20:43 -05:00
dfinke
c0b3297bd7 add link 2019-12-05 18:20:21 -05:00
dfinke
1baed182c3 Updated 2019-12-05 18:19:32 -05:00
dfinke
270a5d921c Start on readme 2019-12-05 18:03:13 -05:00
dfinke
a1ef937619 bump version 2019-12-05 18:03:02 -05:00
Doug Finke
481e2c6cc8 Merge pull request #743 from dfinke/refactor
Refactor
2019-12-05 17:40:56 -05:00
Doug Finke
0bf85de2a2 Merge pull request #738 from jhoneill/refactor
Refactor
2019-12-05 17:32:03 -05:00
jhoneill
1667ba33eb Fix error caused by empty private dir 2019-12-01 22:48:11 +00:00
jhoneill
b534bd974b Repeat 2019-12-01 22:43:37 +00:00
jhoneill
d89346c89c Fix CI getting out of sync with directory changes 2019-12-01 22:39:53 +00:00
jhoneill
229f69313b final tidy for PR 2019-12-01 22:30:57 +00:00
jhoneill
a37f6f3754 Relocate files (hopefully final!) 2019-12-01 18:46:45 +00:00
jhoneill
88e2a23e1b directory renames 2019-12-01 17:04:27 +00:00
jhoneill
6b033d7451 Fix for CI 2019-12-01 00:15:05 +00:00
jhoneill
d1c347285f Move DLL load into PSD1 2019-11-30 15:28:31 +00:00
jhoneill
6508043bc0 Make Update-1st object props an advanced cmdlet & faster 2019-11-30 15:28:05 +00:00
jhoneill
163eaebf66 Merge branch 'refactor' of https://github.com/dfinke/ImportExcel into refactor 2019-11-30 14:22:18 +00:00
jhoneill
5e87c3f6a7 fixes to casing, and some basic functions changed to advanced 2019-11-25 23:40:51 +00:00
jhoneill
feb493e397 fix naming consitency (case mostly) 2019-11-25 01:01:55 +00:00
jhoneill
f6c66e21a7 Sync to Doug's 6.5.3 release 2019-11-23 16:12:29 +00:00
dfinke
02d2fa9975 Updated change notes 2019-11-23 09:09:22 -05:00
dfinke
eb3a394013 bump version 2019-11-23 09:06:26 -05:00
Doug Finke
b517b0a974 Merge pull request #726 from ili101/PipelineVariable
support PipelineVariable
2019-11-23 09:01:05 -05:00
Doug Finke
d56fd89557 Merge pull request #732 from beckerben/master
Fix for #512 & #525
2019-11-23 08:51:15 -05:00
Doug Finke
9d2a1e4d47 Merge pull request #729 from jhoneill/master
Fix for #720,  plus some linting

- #730 Send-SQLDataToExcel -Append // The last row of data is overwritten by a header
- #720 Incorrect table when supplying DataTable with zero rows
2019-11-23 08:02:32 -05:00
ili101
5f3c41e669 Support multiple Paths from pipeline and param 2019-11-22 05:09:00 +02:00
jhoneill
d4da73e8f4 file list no longer needed 2019-11-22 00:52:34 +00:00
jhoneill
0d0fd5ac80 Merge branch 'refactor' of https://github.com/jhoneill/ImportExcel into refactor 2019-11-21 21:44:56 +00:00
jhoneill
3fb3ba0e0e Add test for new table support in export 2019-11-21 21:43:58 +00:00
jhoneill
e49b4ee6e8 Add test for new table support in export 2019-11-21 21:04:32 +00:00
jhoneill
5595aee407 sync export changes from master into refactor 2019-11-21 20:35:17 +00:00
jhoneill
c38adba49d Add tests for improved datatable handling in export 2019-11-21 20:22:06 +00:00
jhoneill
30e4515287 improve DataTable passing to Export 2019-11-21 20:20:56 +00:00
jhoneill
e42f23cd7c Major linting push 2019-11-21 17:29:58 +00:00
jhoneill
5fee49967a sync export with master updtes for #720 2019-11-21 08:42:51 +00:00
jhoneill
98b91ce19d Fix append behavior passing data tables to export 2019-11-21 07:40:21 +00:00
jhoneill
5aa841c225 aggressive linting 2019-11-20 19:14:19 +00:00
jhoneill
aaf18b4d9a Linting mostly 2019-11-20 19:07:22 +00:00
jhoneill
2e0cd4f97d Linting 2019-11-20 18:27:17 +00:00
Ben Becker
e132755061 Fix for #512 & #525
There is an issue with the ConvertFromExcelToSQLInsert where a quote in the text will not be converted properly and will cause invalid insert statements to be created, this commit makes the correction to handle the scenario.
2019-11-20 09:32:32 -05:00
Ben Becker
5617a960ec fix for #512 & #525
There is an issue with the ConvertFromExcelToSQLInsert where a quote in the text will not be converted properly and will cause invalid insert statements to be created, this commit makes the correction to handle the scenario.
2019-11-20 08:13:11 -05:00
jhoneill
873f1a365b Merge pull request #2 from ili101/xml
EPPlus empty row on an empty table
2019-11-19 11:39:03 +00:00
ili101
cc7d18cc59 EPPlus empty row on an empty table 2019-11-18 12:21:21 +02:00
jhoneill
f27729d2ab Remove 72 empty catch blocks and Loadpsd1 2019-11-18 07:50:20 +00:00
jhoneill
d3a2edcc5f default CI/Install-PowerShell version to stable release 2019-11-18 01:32:14 +00:00
jhoneill
cc5eff1157 sync export-excel to 321699e spec. 2019-11-18 01:30:37 +00:00
jhoneill
66bf3adf17 remove LoadPSD calls & 72 empty catch blocks from examples 2019-11-17 22:45:29 +00:00
jhoneill
36f27e3d40 commented pull request 2019-11-17 22:43:42 +00:00
jhoneill
a7104b729c Merge pull request #1 from ili101/jhoneillDTT
Some Fixes
2019-11-17 20:28:51 +00:00
ili101
2ef632ad32 support PipelineVariable 2019-11-17 22:20:54 +02:00
ili101
43927ca078 Export-Excel.ps1
532: Now mode TableName is auto generated if not specified (shouldn't matter just in case).
632: Fix -DataTable "" to use LoadFromDataTable with style (auto generated name)
820: DataTable + TableStyle without TableName corruption fix. Also simplified even more.
822: Change back to "-TableName $TableName" as cange broke test:
Export-Excel.Tests.ps1
617: Undo change test was correct.
2019-11-17 19:58:14 +02:00
jhoneill
1f767338f2 Fix path error in PSM1 2019-11-17 16:04:10 +00:00
jhoneill
6d97018de6 Move help from Comment-based to md. Relocate functions (sans help) 2019-11-17 15:30:15 +00:00
dfinke
6f2e7d682b Added items for next release 2019-11-16 10:21:48 -05:00
jhoneill
07b36e5e56 improve table options on export 2019-11-16 11:01:57 +00:00
jhoneill
16bc380b65 Fix datatable issues with duplicate names & empty tables 2019-11-16 00:33:53 +00:00
jhoneill
d378674d30 Merge remote-tracking branch 'upstream/master' 2019-11-10 18:46:37 +00:00
Doug Finke
5959a97439 Merge pull request #713 from dfinke/FixImportExcelHeaders
Fix import excel headers
2019-11-10 08:57:36 -05:00
jhoneill
3def13e1d9 Merge remote-tracking branch 'upstream/master' 2019-11-10 13:33:27 +00:00
jhoneill
e2c6495340 Re-enabled compare worksheet test on V6. 2019-11-10 13:29:17 +00:00
dfinke
ef6defd75c Change the order of HeaderName and NoHeader. Adding tests. 2019-11-08 16:07:14 -05:00
dfinke
076a494523 Add tests for ImportExcel 2019-11-04 17:06:36 -05:00
dfinke
031c9b9c73 Add If to test for headername parameter 2019-11-04 17:06:26 -05:00
dfinke
321699e427 Update readme about CI improvements 2019-11-03 09:02:04 -05:00
Doug Finke
98b82fc3ba Merge pull request #691 from ili101/ScriptAnalyzer
ScriptAnalyzer 

- Module.Template update
- ScriptAnalyzer report is generated
2019-11-03 08:34:08 -05:00
ili101
394210d41f Module.Template 2.0.4 Update 2019-11-02 18:26:11 +02:00
dfinke
9afc1dbec2 Update readme 2019-11-02 08:54:34 -04:00
dfinke
7e684b87e3 Version should be 6.5.2 2019-11-02 08:54:26 -04:00
dfinke
6b9aed612c Added modules back to the gallery. 2019-11-02 08:54:04 -04:00
dfinke
2647081312 tweak readme 2019-11-01 19:27:27 -04:00
dfinke
e6827ba2c5 Updated readme 2019-11-01 19:10:05 -04:00
dfinke
c6b188f915 bump version 2019-11-01 19:09:48 -04:00
dfinke
3f79a43dc4 Remove requires, formatting updated 2019-11-01 19:04:22 -04:00
Doug Finke
53e57b25a6 Merge pull request #706 from jhoneill/master
SQL -Force , import -asText , test fixes, better Linux behavior
2019-11-01 18:57:02 -04:00
Doug Finke
b87fcf6c08 Merge pull request #711 from uSlackr/patch-2
Adding test for Get-ColumnName for https://github.com/dfinke/ImportExcel/issues/708
2019-11-01 18:53:48 -04:00
Doug Finke
35066c0f5d Merge pull request #710 from uSlackr/patch-1
Fixes Column order issue for https://github.com/dfinke/ImportExcel/issues/708
2019-11-01 18:53:14 -04:00
uSlackr
912fc35693 Update Get-ExcelColumnName.Test.ps1 2019-11-01 17:15:27 -04:00
uSlackr
2711ad5522 Adding test for Get-ColumnName 2019-11-01 17:13:10 -04:00
uSlackr
79c3077162 Fixes Column order issue
Column letters were returned out of order.  Issue #708
2019-11-01 13:41:31 -04:00
jhoneill
24ca8da4c3 Merge remote-tracking branch 'upstream/master' 2019-11-01 01:57:47 +00:00
jhoneill
6b626e8f5f Better handling of autosize (again) 2019-11-01 01:57:04 +00:00
jhoneill
4d17a09537 Better .NET version detection 2019-11-01 01:56:11 +00:00
jhoneill
065fc2f1ad Better handling of linux autosize issue. 2019-10-31 15:48:49 +00:00
jhoneill
c71afe802e *Selective* -asText on import & 1 linux test bug 2019-10-31 15:47:44 +00:00
jhoneill
3284f592b9 -Force behavior clearer in Send-SQLData 2019-10-31 10:31:54 +00:00
jhoneill
5d92442488 New tests for import -asText and send-SQL -Force 2019-10-30 17:38:09 +00:00
jhoneill
fb9a592e9e Wasn't removing force from Param to passed thru 2019-10-30 16:16:41 +00:00
jhoneill
d2a378ffda Ensured tests the module in Azure CI 2019-10-30 11:55:54 +00:00
jhoneill
463944ae2d Added support for Send-SQLData -force 2019-10-30 10:59:45 +00:00
jhoneill
34fe2f429a Added support for Import-Excel -ASTEXT 2019-10-30 10:59:23 +00:00
jhoneill
f65e198986 Adaptation for V6 broke under V5. Fixed 2019-10-30 10:58:59 +00:00
dfinke
9e92f2dbc6 Refactored 2019-09-22 11:58:13 -04:00
dfinke
e45c07c40b Add ReadAllSheets example, update readme bump version 2019-09-22 11:43:47 -04:00
dfinke
fbae59b386 Bumped the version 2019-08-31 19:40:42 -04:00
dfinke
e3f3ae74a4 Updated appveyor badge 2019-08-29 19:15:20 -04:00
dfinke
fda61ca10f Updated badges 2019-08-29 18:55:18 -04:00
Doug Finke
29efd505ed Merge pull request #668 from ili101/TestsRebase
Tests improvments and Linux support
2019-08-29 18:43:14 -04:00
ili101
600d95199c Merge branch 'master' into TestsRebase 2019-08-30 01:29:00 +03:00
ili101
1ad80825ca Poke 2019-08-30 01:24:51 +03:00
dfinke
a2b322d45c Only run tests on Windows PS 5.1 2019-08-29 18:13:38 -04:00
ili101
bb9aa9233b Linux dependencies missing warning 2019-08-29 23:50:10 +03:00
ili101
591b854e2b Tests statuses improve 2019-08-29 01:53:07 +03:00
ili101
15eb2130b5 Mereg 2019-08-29 01:22:55 +03:00
ili101
ea8927394f Remove duplicate files with different case 2019-08-29 00:33:17 +03:00
ili101
cfd89f5afc Samples 2019-08-29 00:33:17 +03:00
ili101
3a6946466f xlsx case 2019-08-29 00:33:16 +03:00
ili101
89a59b1eba Samples tests workaround for Linux 2019-08-29 00:32:26 +03:00
ili101
8047631014 Linux Tests rm and macOS mono-libgdiplus 2019-08-29 00:31:46 +03:00
ili101
9458a29a6b Readme 2019-08-29 00:31:46 +03:00
ili101
ab2405edad Scope fixes for TestDrive 2019-08-29 00:31:45 +03:00
ili101
d1592f8739 Replace $env:TEMP 2019-08-29 00:30:22 +03:00
ili101
6650ecd5b8 FileList Case 2019-08-29 00:22:47 +03:00
ili101
b27f6bec3c Module.Template 2.0.2 2019-08-29 00:22:46 +03:00
dfinke
99f742fa8c Updated readme 2019-08-26 20:41:03 -04:00
dfinke
558070bb60 Bump version 2019-08-26 20:25:25 -04:00
Doug Finke
1e0dd763ca Merge pull request #666 from jhoneill/master
Cross platform test support
2019-08-26 19:58:06 -04:00
jhoneill
a783b9c8ca Fixes to tests to be run x-plaform 2019-08-27 00:31:30 +01:00
jhoneill
9abbe2983b Set-ExcelRange now handles autosize on non-windows 2019-08-27 00:30:56 +01:00
dfinke
0556e4947a Added examples to use Excel sparklines to show data trends 2019-08-26 18:38:30 -04:00
Doug Finke
859b1e5467 Merge pull request #664 from jhoneill/master
Fixes issues with newer EPPLus.
2019-08-26 18:29:08 -04:00
jhoneill
0f4e491076 Two lines went missing from a test. Put back. 2019-08-25 20:25:22 +01:00
jhoneill
b30a91d64f Merge remote-tracking branch 'upstream/master' 2019-08-25 18:39:53 +01:00
jhoneill
d1f794c933 Fixes around EPPlus update 2019-08-25 18:35:46 +01:00
dfinke
a016f069a5 Added Azure DevOps pipeline for three OSes 2019-08-25 12:04:14 -04:00
dfinke
fb16ec4677 Updated az yml to test on Linux and Mac 2019-08-25 08:55:43 -04:00
dfinke
1a51d38c0f Add image showing defaults 2019-08-21 17:37:19 -04:00
dfinke
554163a911 Update readme 2019-08-21 17:37:05 -04:00
dfinke
efd8dcd60a Bump version 2019-08-21 17:36:57 -04:00
Doug Finke
1c77bd31b5 Merge pull request #661 from ili101/Out-Excel
Out-Excel and -Now
2019-08-21 17:06:30 -04:00
ili101
35e013fe1d Reverted to Pester Old syntax 2019-08-18 22:37:24 +03:00
ili101
8ac9927cfa ParameterSets Tests and Out-Excel Example 2019-08-18 22:09:28 +03:00
ili101
9c305a1dae Change -Now default from -AutoFilter to -TableName 2019-08-17 08:03:52 +03:00
ili101
aa738629f7 Out-Excel 2019-08-17 06:29:59 +03:00
jhoneill
c1a26f4f4b Added Protect-Worksheet Tests 2019-08-16 14:14:31 +01:00
jhoneill
63f41ceaec WS protection & better control of export -now 2019-08-15 16:03:42 +01:00
dfinke
b82888527f Updated 2019-07-24 09:54:24 -04:00
dfinke
a3c71de190 Bump version 2019-07-24 09:54:20 -04:00
Doug Finke
f3a99f04ce Merge pull request #638 from jhoneill/master
Updates for copy sheet, clear all in Set-Excel range and fixing a password regression
2019-07-24 09:49:42 -04:00
jhoneill
f631a20269 Conflict resolution 2019-07-24 13:02:39 +01:00
jhoneill
dbd35721ee Fix broken test & regression re: passwords 2019-07-24 12:02:22 +01:00
jhoneill
8759070636 add clearall to set-ExcelRange; 2019-07-24 12:01:06 +01:00
Doug Finke
6259b8d091 Merge pull request #630 from 1DontEx1st/patch-1
Fix typo
2019-07-11 13:21:29 -04:00
1DontEx1st
7086c3707c Fix typo
Changed "Autofiler" to "Autofilter" in -Now description.
2019-07-11 12:01:36 -04:00
jhoneill
8b28172616 Refactored copy sheet and added pipe support 2019-07-09 19:10:51 +01:00
dfinke
abdd37b09e Updated readme and bumped version 2019-07-04 16:20:19 -04:00
Doug Finke
e1e855a823 Merge pull request #628 from dfinke/RelativePath
Added resolve-path and tests. #627; Commented out write-warning
2019-07-04 16:18:14 -04:00
dfinke
585d9686a6 Remove firstTimeThru check 2019-07-04 16:14:36 -04:00
dfinke
e87a6bdaf5 Add extension test back in 2019-07-04 12:16:44 -04:00
dfinke
5ded5111b4 Rename test 2019-07-04 12:16:34 -04:00
dfinke
914c61048b Moved back, CI has issues with $psscriptroot for xlsx 2019-07-04 12:03:05 -04:00
dfinke
25fb76d9b7 Remove test, put check in begin block 2019-07-04 11:59:15 -04:00
dfinke
7faa27a3b3 create xlsx before all in cwd 2019-07-04 11:53:59 -04:00
dfinke
5700be0684 works locally, not in the CI tho 2019-07-04 11:45:42 -04:00
dfinke
6d86108060 wip: remove param validation 2019-07-04 11:40:02 -04:00
dfinke
4581c2b3e9 Added resolve-path and tests. #627; Commented out write-warning 2019-07-04 11:18:28 -04:00
dfinke
142c31ccc1 Added image to readme 2019-06-18 14:56:00 -04:00
dfinke
b99b7ba799 Added chart trendline example 2019-06-18 14:47:14 -04:00
dfinke
17b5d2caec bump version 2019-06-18 14:47:14 -04:00
Doug Finke
6add16aa9f Merge pull request #615 from dfinke/EnableTrendLine
Initial pass at adding ChartTrendLine
2019-06-18 10:55:37 -04:00
dfinke
9aa0192ee6 Added and chart trendline example 2019-06-18 10:44:07 -04:00
dfinke
fa25d1ac06 Added tests for trendlines on charts 2019-06-18 10:31:37 -04:00
dfinke
8131eee50f Check if trendline was requested 2019-06-15 14:21:37 -04:00
dfinke
3ce485a144 Initial pass at adding ChartTrendLine 2019-06-13 15:38:28 -04:00
dfinke
bb1b413ada Updated 2019-06-11 17:24:28 -04:00
dfinke
08078410dc Added 2019-06-11 17:23:21 -04:00
dfinke
3edcc0bdfb Added pic link 2019-06-11 17:23:11 -04:00
dfinke
25081f84c1 Updated readme 2019-06-11 17:12:16 -04:00
dfinke
668e3c982c Image of New-ExcelStyle 2019-06-11 17:12:03 -04:00
dfinke
98cf7e03c1 Add Excel style example 2019-06-11 17:11:42 -04:00
dfinke
5b5c1c6fce Bump version 2019-06-11 17:11:22 -04:00
Doug Finke
4383916090 Merge pull request #610 from jhoneill/master
Style and read only
2019-06-11 16:13:22 -04:00
jhoneill
7c2bbf9595 Read-only imports + small test fix 2019-06-11 15:09:36 +01:00
jhoneill
48ca35b9ff Added -Style to export-Excel and -merge to set-excelRange 2019-06-05 21:17:35 +01:00
dfinke
68be3c3483 try again later 2019-05-31 12:43:45 -04:00
dfinke
78326b4258 again 2019-05-31 12:42:31 -04:00
dfinke
94b10b6f51 again 2019-05-31 12:41:25 -04:00
dfinke
8ac9815e83 test exclude again 2019-05-31 12:37:44 -04:00
dfinke
b3184d36a9 try exclude again 2019-05-31 12:36:45 -04:00
dfinke
e58265075a test exclude trigger 2019-05-31 12:32:19 -04:00
dfinke
453b2d8963 update trigger 2019-05-31 12:29:01 -04:00
dfinke
bc816851c9 Shouldn't trigger a build 2019-05-31 11:32:55 -04:00
dfinke
b0a68e3445 Don't trigger a build if examples get checked in 2019-05-31 11:29:28 -04:00
dfinke
8a1d0b0cf8 Added simple vba example 2019-05-31 11:21:44 -04:00
Doug Finke
26f55251e2 Update CustomReport.ps1 2019-05-31 10:13:03 -04:00
dfinke
0f9b308d53 Bump version 2019-05-26 14:46:57 -04:00
Doug Finke
847c9a1dc4 Merge pull request #602 from jhoneill/master
Allow import Excel to take packages not just paths
2019-05-24 20:38:52 -04:00
jhoneill
b488ffc700 Allow import Excel to take packages not just paths 2019-05-24 16:23:13 +01:00
dfinke
3ec2481750 Added Pivoting Pester Test Results 2019-05-06 12:14:33 -04:00
Doug Finke
2d26c854d9 Merge pull request #593 from jhoneill/master
added "Analyze this"
2019-05-06 10:51:55 -04:00
jhoneill
a4348ddca7 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2019-05-06 09:52:19 +01:00
jhoneill
6bfdea6d3e Example : Analyze_this 2019-05-06 09:52:12 +01:00
jhoneill
cfd3db5803 Example : Analyze_this 2019-05-06 09:43:38 +01:00
jhoneill
f20a9de3df New "Analyze-This" example 2019-05-03 12:45:30 -07:00
jhoneill
978e8d38b5 Added Example for PSScriptAnalyzer 2019-05-02 16:34:00 -07:00
Doug Finke
e7d2b528e5 Merge pull request #590 from jhoneill/master
Fixed case on file names, and applied a new rules from script analyzer
2019-05-01 16:22:42 -04:00
jhoneill
899a8215e5 Changed test from Get-Netadapter to CIM for v6 2019-05-01 11:24:36 -07:00
jhoneill
b06e9e35b7 Fixed file case errors impacting loading on Linux 2019-05-01 10:16:13 -07:00
jhoneill
6c7f00b031 Linted with the updated PSScriptAnalyzer. 2019-04-30 13:28:52 -07:00
dfinke
337af82ae2 Updated readme.md 2019-04-12 16:02:47 -04:00
Doug Finke
77ef2ebc40 Merge pull request #576 from ili101/FixDataTablePerformance
Double DataTable performance
2019-04-08 16:42:28 -04:00
ili101
92c97b25c3 Replace [void] with $null 2019-04-08 13:34:31 +03:00
ili101
52231254a5 Replace " | Out-Null" with "$null = " everywhere just in case it degrades performance in other places 2019-04-07 22:26:48 +03:00
ili101
494ac51ae5 Replace " | Out-Null" with "$null = " doble performance on DataTable 2019-04-07 22:11:31 +03:00
Doug Finke
0febb4a3c2 Merge pull request #575 from ili101/TableStyleFix
TableStyle is set to Medium6 but ignored
2019-04-07 14:47:06 -04:00
Doug Finke
62f0faa5c5 Merge pull request #574 from ili101/TestsFix
Fix Test accidentally closing focused window
2019-04-07 12:50:56 -04:00
ili101
1055bc41bf TableStyle is set to Medium6 but ignored 2019-04-07 18:16:35 +03:00
ili101
e100fa7a36 Fix Test accidentally closing focused window if focus not switched to Out-GridView. 2019-04-07 15:02:50 +03:00
dfinke
83bd387f98 Update what's new 2019-04-06 11:30:10 -04:00
dfinke
caf0059ef5 Bumped version, sorted function exports 2019-04-06 11:20:15 -04:00
Doug Finke
965831ba57 Merge pull request #573 from jhoneill/master
Perf improvements for Export-Excel
2019-04-06 11:13:47 -04:00
jhoneill
a49cab5efc Slimmed down send-sqlData - undid previous 2019-04-06 10:49:57 +01:00
jhoneill
17bcea15e8 Fixed a poss parameter set issue; 2019-04-06 00:21:48 +01:00
jhoneill
79fb29740d Rolled back readme for merge purposes 2019-04-04 18:03:49 +01:00
jhoneill
2984fe2ef5 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2019-04-04 18:01:31 +01:00
jhoneill
8734dbd26c Readme update 2019-04-04 18:01:26 +01:00
jhoneill
0211edf008 Readme update 2019-04-04 17:42:33 +01:00
jhoneill
552552b93d Perf improvments and direct table handling for Export Excel, 2019-04-04 17:08:05 +01:00
jhoneill
2229bfb3ed Moved Add-CellValue 2019-04-04 09:45:10 +01:00
Doug Finke
25e7962100 Merge pull request #564 from slestak/patch-1
Update Export-Excel.ps1 - Add-Worksheet help typo
2019-03-19 13:02:01 -04:00
Steve Romanow
6071f77218 Update Export-Excel.ps1
fix typo
2019-03-19 11:56:20 -04:00
dfinke
52b9333d7c added regions 2019-03-03 12:56:35 -05:00
dfinke
d3d8d76a71 fixed psm1. added .ps1 to Set-WorkSheetProtection 2019-03-02 14:03:26 -05:00
dfinke
f5f97fcd56 bumped the read up 100 ms 2019-03-02 13:24:19 -05:00
dfinke
6665c2952d fix readme 2019-03-02 13:17:22 -05:00
dfinke
31444320cb Updated 2019-03-02 13:15:16 -05:00
dfinke
d5734ff9b2 Pulled from the tests. Added additional rule 2019-03-02 13:13:53 -05:00
dfinke
4481637c21 spell check 2019-03-02 12:40:45 -05:00
dfinke
6caf247f5b bump version 2019-03-02 12:38:10 -05:00
Doug Finke
65641955ba Merge pull request #552 from jhoneill/master
Minor fixes and added data-validation support
2019-03-02 12:32:43 -05:00
jhoneill
f2c13949a4 Fixed Send-SQLData behavior with tables/ranges when adding to a sheet 2019-03-01 08:31:43 +00:00
jhoneill
878ca570fb Updated readme for recent commits 2019-02-28 07:42:22 +00:00
jhoneill
28fd5512bb Fixed broken tests 2019-02-25 20:53:11 +00:00
jhoneill
7e465e3729 Merge remote-tracking branch 'upstream/master' 2019-02-25 19:33:51 +00:00
jhoneill
22283604f8 Sync with DFinke's master 2019-02-25 18:14:46 +00:00
jhoneill
0c603afc0e improved handing of Hyperlinks in Export 2019-02-21 19:25:53 +00:00
Doug Finke
a4a989c556 Update Get-HtmlTable.ps1 2019-02-20 19:26:43 -05:00
dfinke
d94db666d7 Added module 2019-02-18 14:06:18 -05:00
dfinke
438be760f7 updated 2019-02-18 13:51:50 -05:00
dfinke
2949ecc173 update 2019-02-17 18:27:41 -05:00
dfinke
639ca738f6 rearrange 2019-02-17 18:27:36 -05:00
dfinke
736dd648f4 Updated git ignore 2019-02-17 15:36:05 -05:00
dfinke
acdbd4a618 added demo 2019-02-13 19:08:01 -05:00
dfinke
ad35d39850 Removed unneed tests 2019-02-13 16:23:37 -05:00
dfinke
e7afe166a4 Updated to point to new rest api for stock info 2019-02-02 16:58:57 -05:00
dfinke
37b076706e rename file 2019-02-02 16:58:57 -05:00
jhoneill
3303116658 Test for validation rules had un-necessary cleanup step which caused an error 2019-01-21 14:31:04 +00:00
jhoneill
89a8cb0469 Added data validation 2019-01-21 14:20:57 +00:00
Doug Finke
bb9f4c31a6 Delete ImportExcel-5.4.2-20181217155848.zip
not needed
2019-01-18 19:49:14 -05:00
Doug Finke
996d1246cf Merge pull request #523 from stahler/patch-1
Update Export-Excel.ps1
2019-01-11 21:08:24 -05:00
Wes Stahler
0bb08fcb20 Update Export-Excel.ps1 2019-01-11 20:49:08 -05:00
Doug Finke
d004019761 Merge pull request #520 from dfinke/FixCopyExcelWorksheetStreamClose-dcf
Fix Copy-ExcelWorkSheet so Remove-WorkSheet works. Resolves #516
2019-01-05 09:57:17 -05:00
dfinke
a54ca228e9 Resolves #516 2019-01-05 09:54:52 -05:00
dfinke
bb6ff474a8 updated readme 2019-01-05 09:53:38 -05:00
dfinke
86b5c13543 Close the $Stream so the xlsx won't be locked 2019-01-05 09:49:48 -05:00
dfinke
c2525b0348 Add tests to show the IOException: The process cannot access the file 2019-01-05 09:42:37 -05:00
dfinke
9625e4a8ac Update ReadME 2018-12-31 18:53:54 -05:00
dfinke
82177da695 Bump release 2018-12-31 18:53:45 -05:00
Doug Finke
b3f7a60be8 Merge pull request #517 from dfinke/FixAutoNameRange-dcf
Fix auto name range when a single property is incoming
2018-12-31 18:48:09 -05:00
dfinke
643610c267 Add test for a single property name 2018-12-31 18:45:26 -05:00
dfinke
bd7d70a050 Fix when only one property name is in the incoming data 2018-12-31 18:45:16 -05:00
Doug Finke
d1f41012a1 Merge pull request #514 from dfinke/AddRemoveWorksheet-dcf
Add Remove-Workseet
2018-12-30 09:42:53 -05:00
dfinke
0fbe9dbc9b update readme 2018-12-30 09:38:43 -05:00
dfinke
e0b2d15c53 bump version 2018-12-30 09:38:36 -05:00
dfinke
34c924ae19 Handles piping in the a list of xlsx files 2018-12-30 09:34:44 -05:00
dfinke
9217962306 Update and fix tests 2018-12-30 08:52:19 -05:00
dfinke
56acf56430 Add code to do removal 2018-12-30 08:52:11 -05:00
dfinke
ef9be471ab First test 2018-12-30 08:45:51 -05:00
dfinke
9db2bc068e Added to psm1 2018-12-30 08:29:18 -05:00
dfinke
9560ea83f9 updated 2018-12-20 09:15:25 -05:00
dfinke
9c79ba573c updated 2018-12-20 09:13:45 -05:00
Doug Finke
894e645a47 Update MultiplePivotTables.ps1 2018-12-20 09:01:21 -05:00
dfinke
f3dc390bfa Added example showing how to create mutiple pivottables on a single sheet 2018-12-17 16:00:40 -05:00
dfinke
f0f58f84a0 Added Timestamp Bucket example 2018-12-10 15:16:11 -05:00
dfinke
7ded24d2f9 updated with example for grouping numeric 2018-12-08 08:35:20 -05:00
dfinke
cf964e3e4f added grouping image for example 2018-12-08 08:32:20 -05:00
dfinke
8c5b3b2f5f Added Places and Points examples. Taken from unit tests 2018-12-07 18:08:50 -05:00
dfinke
8409adeeba Fix param names in tests 2018-12-07 14:42:04 -05:00
dfinke
153d4d8c45 bump version 2018-12-07 14:33:44 -05:00
dfinke
69f9ba7d17 Fix spelling for GroupNumber* params 2018-12-07 14:33:38 -05:00
dfinke
e4deb5801e fixed spelling 2018-12-07 13:25:20 -05:00
Doug Finke
1a74c0f0d0 Merge pull request #501 from jhoneill/master
Added Pivot table grouping
2018-12-07 13:17:40 -05:00
jhoneill
72e44da219 Put back DoTests and yml file. Updated readme for pivot groups 2018-12-06 21:38:13 +00:00
jhoneill
bef2f29651 Revert "Update DoTests.ps1"
This reverts commit c5cc018eb5.
2018-12-06 20:16:45 +00:00
jhoneill
787dda70ee Revert "Take verbose back out of DoTests"
This reverts commit 268d48ce3d.
2018-12-06 20:16:34 +00:00
jhoneill
285e9e4949 Revert "Update azure-pipelines.yml"
This reverts commit eca631670c.
2018-12-06 20:16:25 +00:00
jhoneill
01e3ea206d Revert "One more"
This reverts commit 284560e109.
2018-12-06 20:16:09 +00:00
jhoneill
6f3420d11e Revert "path fix"
This reverts commit 234615dfdb.
2018-12-06 20:15:45 +00:00
jhoneill
2981bf23b1 Added Pivot table grouping 2018-12-06 17:45:10 +00:00
jhoneill
c5cc018eb5 Update DoTests.ps1 2018-11-30 16:58:08 +00:00
jhoneill
268d48ce3d Take verbose back out of DoTests 2018-11-30 16:45:11 +00:00
jhoneill
eca631670c Update azure-pipelines.yml 2018-11-30 16:33:06 +00:00
jhoneill
284560e109 One more 2018-11-30 16:26:45 +00:00
jhoneill
234615dfdb path fix 2018-11-30 16:25:02 +00:00
jhoneill
d31cd04781 Merge remote-tracking branch 'upstream/master' 2018-11-30 16:20:01 +00:00
jhoneill
77481f2901 More of the same 2018-11-30 16:18:46 +00:00
jhoneill
54fec69f88 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-11-30 16:06:07 +00:00
jhoneill
1dc9a02d7d Updates to azure pipeline 2018-11-30 16:05:58 +00:00
azure-pipelines[bot]
f86fdbab22 Set up CI with Azure Pipelines 2018-11-30 14:46:43 +00:00
dfinke
66937db040 Did expand alias 2018-11-27 09:55:05 -05:00
dfinke
80520299aa Added Apply Style example 2018-11-27 09:44:15 -05:00
jhoneill
2753a6876a Better handling of Empry values when setting Columns/Rows 2018-11-27 11:03:06 +00:00
dfinke
ade442b18c animation for export stocks 2018-11-25 16:16:39 -05:00
dfinke
45ba112f73 bump version 2018-11-25 16:16:28 -05:00
dfinke
e1fe36699b Added Export-StocksToExcel 2018-11-25 16:16:16 -05:00
dfinke
b3f4b188da updated 2018-11-20 19:16:22 -05:00
dfinke
0ce75794e6 Added Mortgate Calculator 2018-11-20 13:21:04 -05:00
jhoneill
3afe2059e5 Added message to say title is ignored when exporting with -Append. 2018-11-20 10:52:29 +00:00
dfinke
66b7b64779 fix fontcolor 2018-11-19 18:50:13 -05:00
Doug Finke
d90cd6d2d0 Merge pull request #493 from jhoneill/master
TO Do #491 Done
2018-11-18 09:20:49 -05:00
jhoneill
1d1f266fb6 Better checks for invalid table names 2018-11-15 16:22:36 +00:00
jhoneill
4945b4d6e3 Fix to readme 2018-11-15 12:33:03 +00:00
jhoneill
21b5a11aca Trap invalid worksheet name in Set-ExcelRow/Column 2018-11-13 10:16:51 +00:00
dfinke
d1976bf3a9 Prepped for 5.4.0 2018-11-03 11:33:15 -04:00
Doug Finke
ffcdd39ae9 Merge pull request #488 from jhoneill/master
Chart supports multiple X ranges and headers from cells
2018-11-03 15:03:45 +00:00
jhoneill
b4b5e75d28 Chart supports multiple X ranges and headers from cells 2018-11-03 13:20:30 +00:00
Doug Finke
4c3eb792d6 Merge pull request #482 from jhoneill/master
Parameter clean up, improvements to Merge-MultipleSheets
2018-11-01 22:07:41 +00:00
jhoneill
c4ef920bdf Fix stray $ in addConditionalFormatting. Updated readme 2018-11-01 21:56:37 +00:00
jhoneill
d81c2055e9 Found/Fixed more issues where zero or empty parameters should be allowed but where skipped. 2018-10-29 11:55:51 +00:00
jhoneill
4528f3b052 Merge remote-tracking branch 'upstream/master' 2018-10-29 07:34:12 +00:00
dfinke
5acec641fe updated 2018-10-25 18:32:44 -04:00
Doug Finke
04d06ff008 Merge pull request #474 from conradagramont/patch-1
Create AddMultiWorkSheet.ps1
2018-10-25 22:15:29 +00:00
jhoneill
1974beef2d Improved handling of Piped files in Merge-MultipleSheets 2018-10-25 15:11:21 +01:00
jhoneill
49f0c97635 Merge remote-tracking branch 'upstream/master' 2018-10-25 10:40:51 +01:00
jhoneill
0710724e2d Added code for -Passthru in Merge-MultipleSheets 2018-10-25 09:40:50 +01:00
Doug Finke
a6438d468a Update appveyor.yml
Save for another time. Looks like path separators are the first issue
2018-10-24 19:56:25 -04:00
Doug Finke
ce92461efc Update appveyor.yml
Enable Linux image for CI
2018-10-24 19:50:47 -04:00
Doug Finke
b3c4a334b5 Merge pull request #477 from jhoneill/master
Tests now handle V6 Process objects (more properties)
2018-10-24 23:47:08 +00:00
Conrad Agramont
6b2190bfff Updated AddMultiWorkSheet
Removed the extra code that wasn't required.
2018-10-24 16:37:10 -07:00
jhoneill
5822ef330e Merge remote-tracking branch 'upstream/master' 2018-10-24 23:32:58 +01:00
jhoneill
d78e3fff98 Tests now handle V6 Process objects (more properties) 2018-10-24 23:23:26 +01:00
Doug Finke
85bd85ee69 Merge pull request #475 from jhoneill/master
Colors for PS core and proof reading
2018-10-24 21:26:35 +00:00
jhoneill
04e8faaccc Re-instated trap for empty sheet in set row/col 2018-10-24 17:45:51 +01:00
jhoneill
2c062a4e5d Merge branch 'master' into master 2018-10-24 17:27:23 +01:00
jhoneill
80c1a945f0 Revert "Trap set row and column on empty shet"
This reverts commit 1d5ec26b04.
2018-10-24 17:18:59 +01:00
jhoneill
1d5ec26b04 Trap set row and column on empty shet 2018-10-24 17:14:33 +01:00
Conrad Agramont
860b2724f5 Create AddMultiWorkSheet.ps1
This example shows how to add multiple tabs within the same file.
2018-10-23 10:01:29 -07:00
jhoneill
c38648a654 Fix for color not casting strings in PS Core 2018-10-22 17:21:09 +01:00
jhoneill
dcd730a4d1 Fixed stray char in addConditional formatting 2018-10-21 22:33:59 +01:00
jhoneill
0fdaeb977b Help updates after more proof-reading 2018-10-19 11:12:46 +01:00
jhoneill
61173d5e40 Updates after proof reading help 2018-10-17 11:23:15 +01:00
jhoneill
d26f0c66dd More PS6 friendly tests. Help and pos param tweaks in Conditional Fmt 2018-10-15 13:14:14 +01:00
dfinke
fe4fcff444 Added synopsis 2018-10-10 14:12:23 -04:00
jhoneill
01c58faea8 Color constants are now [color] objects, not string for V6 compat. 2018-10-10 10:36:36 +01:00
dfinke
dce2f6d108 Set switch -DontCreateZip 2018-10-09 20:05:38 -04:00
dfinke
49afad6977 added pwsh to run tests in 2018-10-09 19:59:48 -04:00
jhoneill
b7add5f9e1 Changed color default parameters away from strings 2018-10-09 23:01:55 +01:00
Doug Finke
c07fc81dfe Merge pull request #458 from jhoneill/master
Fixed #457 & a couple more tweaks
2018-10-08 17:05:41 -04:00
jhoneill
3835ceeebb Better parameter sets for merge. Fixed bug with setting font name. 2018-10-08 21:35:19 +01:00
Doug Finke
6683bed799 Merge pull request #455 from SQLvariant/master
Added Example for SQL Server
2018-10-08 14:47:27 -04:00
dfinke
20aade4bdd Add Switch $DontCreateZip 2018-10-08 14:17:09 -04:00
dfinke
b6965e0724 azure devops did *not* skip 2018-10-06 16:26:15 -04:00
dfinke
9d85c6cb81 test for azure build pipeline to skip the build 2018-10-06 16:25:12 -04:00
dfinke
a17fc95415 adde azure devops yaml file 2018-10-06 16:21:54 -04:00
dfinke
ecb045274a remove line from readme 2018-10-06 16:13:40 -04:00
dfinke
e5c4a715d6 see if appveyor skips after checking in the readme 2018-10-06 16:12:16 -04:00
dfinke
e27e98a9eb Added skip_commits section 2018-10-06 16:10:02 -04:00
Doug Finke
9da8bf8bf7 Merge pull request #456 from dbaileyut/dbaileyut-patch-fixTypo
* Fix typo in Import-Excel help description
2018-10-05 17:59:32 -04:00
dbaileyut
50905c7989 * Fix typo in Import-Excel help description 2018-10-05 16:04:19 -05:00
jhoneill
91a7c17341 perf: removed verbose from loop in import. tests: better alias check 2018-10-04 21:31:47 +01:00
Aaron Nelson
3c18af50b9 Added Example for SQL Server to Import-Excel
Added an example for INSERTing rows into a SQL Server table from the Import-Excel function.
2018-10-04 15:36:42 -04:00
jhoneill
66f5d09ace Better param sets in Merge-WS & conditional formatting in Merge-Multi 2018-10-04 20:13:33 +01:00
Aaron Nelson
fa64299760 Added Example for SQL Server
Added an example for running a query from a SQL Server database using the Invoke-Sqlcmd cmdlet, and then exporting the results to Excel.
2018-10-04 14:29:33 -04:00
Doug Finke
c36e5fb582 Merge pull request #454 from dfinke/FixPivotStyleName
Renamed PivotTableSyle to PivotTableStyle - fixes #453
2018-10-04 10:00:18 -04:00
dfinke
5158addc36 Hotfix for misnamed parameter 2018-10-04 09:57:22 -04:00
dfinke
bf2e37ac9f bumped version to 5.3.4 2018-10-04 09:57:04 -04:00
dfinke
d22d40cdc2 Renamed PivotTableSyle to PivotTableStyle - fixes #453 2018-10-03 19:26:37 -04:00
dfinke
df49e04c6c tweak readme 2018-10-03 08:38:58 -04:00
dfinke
f60ca87358 bumped version 2018-10-03 08:34:45 -04:00
dfinke
cef95f9ebe Added to the readme 2018-10-03 08:34:31 -04:00
Doug Finke
288071035f Merge pull request #450 from jhoneill/master
Readme only
2018-10-03 08:25:31 -04:00
jhoneill
414d1ac72b Git Markup stuck in Readme 2018-10-03 12:05:01 +01:00
jhoneill
1c7241774f Three extra lines in readme.md 2018-10-03 10:55:54 +01:00
jhoneill
7c773ff915 Three extra lines in Readme.MD 2018-10-03 10:54:15 +01:00
jhoneill
46de6c5934 Two extra lines in Readme.MD 2018-10-03 10:47:04 +01:00
Doug Finke
955c737bb7 Merge pull request #449 from jhoneill/master
Fix for bug handling null and zero; date format applied in send-sql
2018-10-02 16:58:22 -04:00
jhoneill
74e5fee161 Fixed bugs relating to handling of null. zero and empty string as data. 2018-10-02 21:15:16 +01:00
Doug Finke
c3331e8f09 Merge pull request #446 from lazywinadmin/master
Expand a few aliases
2018-10-01 20:18:42 -04:00
François-Xavier Cat
1951a61699 Expand a few aliases 2018-10-01 17:01:15 -07:00
jhoneill
5b29ccd9c2 Send-SQLDataToExcel applies formatting to date fields. 2018-09-30 22:49:35 +01:00
Doug Finke
d8bd5a8cb6 Merge pull request #444 from jhoneill/master
Minor improvements
2018-09-28 17:42:45 -04:00
Doug Finke
820722b481 Merge branch 'master' into master 2018-09-28 17:40:58 -04:00
Doug Finke
08c82977f5 Merge pull request #442 from dfinke/RenameToLegendPosition
Renamed LegendPostion to LegendPosition
2018-09-28 17:33:40 -04:00
jhoneill
a2dd42fc80 Blitz on spelling mistakes in help. Still not 100% proof-read. 2018-09-28 12:07:22 +01:00
jhoneill
c1d778ef85 Readme update 2018-09-27 15:05:07 +01:00
jhoneill
7abb5dde89 Updates to help text (more proof reading still needed) 2018-09-27 14:55:21 +01:00
jhoneill
0f15f3e3e5 fixed incorrect range in chart test 2018-09-27 12:26:43 +01:00
jhoneill
3194bb0ee4 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-09-27 12:24:31 +01:00
jhoneill
b1f716f0d5 Better handling of autonamerange including piping columns to Set-Column to do multiple ranges. 2018-09-27 12:24:23 +01:00
jhoneill
a8f7a13248 Better handling of autonamerange including piping columns to Set-Column to do multiple ranges. 2018-09-27 12:00:01 +01:00
dfinke
d200a2929b Added Azure-DevOps build tag 2018-09-26 18:47:58 -04:00
dfinke
99e69bd6c0 Renamed LegendPostion to LegendPosition 2018-09-26 16:32:10 -04:00
dfinke
4f0c0d7c28 bumped, fix for aliases 2018-09-20 13:58:13 -04:00
Doug Finke
968d5a57b6 Merge pull request #438 from dfinke/TestFunctionAliases
Added ps1 to for testing aliases
2018-09-20 12:33:06 -04:00
dfinke
bdefb45095 Remove space from Alias attribute 2018-09-20 12:12:53 -04:00
dfinke
4297d2ef82 Confirms the errors 2018-09-20 12:09:19 -04:00
dfinke
a49bdb3abc Added ps1 to for testing aliases 2018-09-20 12:01:34 -04:00
dfinke
a983ecd765 Move to using Robocopy and the /mir flag 2018-09-20 11:44:53 -04:00
dfinke
5a7d84e624 Added comment for usage 2018-09-20 10:22:36 -04:00
dfinke
e0f5d9f789 Removed these files - look unused 2018-09-20 10:22:27 -04:00
dfinke
7d3bcb810c bumped build # 2018-09-20 09:25:14 -04:00
dfinke
8975aa2e95 Added PivotTable.ps1 2018-09-20 09:24:50 -04:00
dfinke
77f30f105b Spell check 2018-09-19 13:49:44 -04:00
dfinke
972142f727 Bumped version, add header to readme 2018-09-19 08:11:33 -04:00
Doug Finke
cfd1ac99b2 Merge pull request #435 from jhoneill/master
Improved help, minor bugfixes and parameter improvments, more tests
2018-09-19 07:48:41 -04:00
jhoneill
e09c5e5207 Further polish to help 2018-09-11 15:34:37 +01:00
jhoneill
3ff59907ff Improvements to help 2018-09-11 14:05:23 +01:00
jhoneill
ef4ac9777b Updates to examples . Minor bug fix to format in Merge-Multiple 2018-09-10 14:26:29 +01:00
jhoneill
65b1f79d53 Range handling for Add-Conditional format and range tests 2018-09-09 15:10:05 +01:00
jhoneill
ecad48acb3 Set-Format,row and column renamed; definitions as hashtables, 2018-09-08 18:36:51 +01:00
jhoneill
f47887f7fe Support for hash tables as definitions; more tests 2018-09-07 13:07:40 +01:00
jhoneill
061ae22bfe Added TotalSettings to Add-ExcelTable 2018-09-06 20:39:40 +01:00
jhoneill
53b63b3780 Better support of reverse in add-conditional formatting. Tidied Exampes 2018-09-06 15:23:58 +01:00
jhoneill
378a20a094 Further refinements to Conditional format, made new test more robust 2018-09-05 16:56:48 +01:00
jhoneill
7edf5f8a3a Conditional formatting supports named ranges, & booleans in the sheet 2018-09-05 13:38:17 +01:00
jhoneill
6393701a2f Further updates to on-line help 2018-09-05 11:44:41 +01:00
jhoneill
71c22d647d A blitz on on line help 2018-09-04 22:56:20 +01:00
jhoneill
ef656f72b3 Updated Tests 2018-09-02 13:57:21 +01:00
jhoneill
dfd9b23cd7 See readme.md for details 2018-08-31 17:22:52 +01:00
jhoneill
f94a075f52 Better checks and more choice in Conditional formatting 2018-08-23 12:14:47 +01:00
jhoneill
cea9713129 Relocation of and parameter improvments to Chart, & Pivot table; 2018-08-23 12:12:56 +01:00
dfinke
343687c418 bump version 2018-08-18 06:29:08 -04:00
dfinke
d4d2b4a856 Spell check 2018-08-16 19:26:50 -04:00
Doug Finke
bed52d456d Merge pull request #416 from jhoneill/master
Fix for #415, auto extend ranges/tables on append, password fixes, wildcards in Exclude property
2018-08-16 13:23:30 -04:00
jhoneill
31e6eaf59b Clean-up of Set-Row/Column (value no long mandatory); support array formulas in set-format 2018-08-16 17:33:44 +01:00
jhoneill
d770646dc7 Fixed small bug with Append and simple data types 2018-08-15 23:44:00 +01:00
jhoneill
bc65699068 Improved behavior of -NumberFormat in Export-Excel 2018-08-15 22:52:22 +01:00
jhoneill
ce3fd2021f Fix currency parsing Test when "." isn't a seperator in local culture 2018-08-14 17:32:34 +01:00
jhoneill
10f670b4e6 Added timespan support to export Excel 2018-08-14 16:35:19 +01:00
jhoneill
c49b7b6db0 Epplus is not setting chart axis position properly, so disabled for now 2018-08-14 15:40:52 +01:00
jhoneill
f768634214 Refined fix for #419 2018-08-14 12:54:17 +01:00
jhoneill
07342235b9 Fixed bug exporting nested objects; removed = in cond fmt expressions 2018-08-14 10:53:50 +01:00
jhoneill
2793ff1c21 Added -Calculate, fixed formula creation to be EPPlus-friendly 2018-08-13 20:58:10 +01:00
jhoneill
121346f939 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-08-12 15:07:16 +01:00
jhoneill
dc8a096732 Reduced number of proccess in tests to be appveyor freindly 2018-08-12 15:03:33 +01:00
jhoneill
c63512e658 Further fix to DLL screw up 2018-08-12 14:37:09 +01:00
jhoneill
e46fe6d3e9 Updated tests (and resulting refinements) 2018-08-12 14:01:56 +01:00
jhoneill
6ae50c3193 Mistakenly committed renamed epplus.dll 2018-08-12 11:41:46 +01:00
jhoneill
ee2378150c Merge remote-tracking branch 'upstream/master' 2018-08-10 10:23:03 +01:00
jhoneill
259c7e8ae6 Export-Excel -append now automatically extends ranges & tables 2018-08-10 09:29:17 +01:00
dfinke
ae30bfe6c3 don't test ps core 2018-08-08 19:44:09 -04:00
dfinke
3756cd6ad8 set scope 2018-08-08 19:40:33 -04:00
dfinke
1014250e0b try it in PS Core 6 and on Linux 2018-08-08 19:32:15 -04:00
jhoneill
951364da51 Now supports more than 26 columns. 2018-08-08 15:48:53 +01:00
jhoneill
c1604fc08a Exclude Property in Export-Excel now supports wildcards 2018-08-07 16:16:45 +01:00
jhoneill
5a235e309e Tider errors for file open on import; password tests 2018-08-07 15:00:33 +01:00
jhoneill
af77580b5e Password support fixes 2018-08-06 14:30:10 +01:00
jhoneill
b06a5059c5 Updated test for better currency string 2018-08-06 14:21:35 +01:00
jhoneill
edab941c44 Bug fix Export list of dates and Title background color 2018-08-06 11:13:27 +01:00
jhoneill
91fb314bca Expand Number format now sets regional layout for currency 2018-08-06 11:12:41 +01:00
dfinke
d07affcd46 updated 2018-08-02 17:10:54 -04:00
Doug Finke
2b3228d041 Merge pull request #411 from jhoneill/master
Fixed Parameter issues in Add-ConditionalFormat & test for it
2018-08-02 17:07:35 -04:00
jhoneill
34c5177dfc readme fix 2018-08-02 14:01:16 +01:00
jhoneill
f52ba1c50a Merge remote-tracking branch 'upstream/master' 2018-08-02 13:56:21 +01:00
jhoneill
b50cc67bb3 warn instead of aborting when a property won't go into a cell. 2018-08-02 13:56:01 +01:00
jhoneill
42e2b11a88 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-08-02 13:49:58 +01:00
jhoneill
b6509d3f5c Generate warning instead of aborting when a property can't be inserted into a cell. 2018-08-02 13:49:35 +01:00
jhoneill
29503861fb Generate warning instead of aborting when a property can't be inserted into a cell. 2018-08-02 13:27:49 +01:00
jhoneill
196497e3a0 Applied fix for parameter issues already done for Set format to conditional format 2018-08-02 11:20:19 +01:00
dfinke
d9fe0a31c3 sorted file list 2018-08-01 11:22:30 -04:00
dfinke
26bf4b9a64 refactored the supporting file list that gets copied so it can be tested 2018-08-01 11:18:13 -04:00
dfinke
a0719b22f0 spell check 2018-08-01 10:49:02 -04:00
dfinke
42d56ac557 bump version 2018-08-01 10:48:53 -04:00
dfinke
9b9c1de8fd remove ps1 2018-08-01 10:48:45 -04:00
Doug Finke
e3fdbf9fcc Merge pull request #408 from jhoneill/master
Argument completers for Number format and Worksheetname, bug fix for hidden in set format & more
2018-08-01 10:32:26 -04:00
jhoneill
abb971be88 Argument completers, Fix hidden in Set format. More tests 2018-08-01 10:35:10 +01:00
jhoneill
77fb51da8d Argument completers for worksheet name & number format. Fixed bug with -hidden 2018-07-31 15:07:33 +01:00
Doug Finke
61c73461ca Update README.md 2018-07-29 20:36:44 -04:00
Doug Finke
00d88eec0e Merge pull request #405 from jhoneill/master
Internal hyperlinks, reworked format parameters, unhide in export Excel
2018-07-29 20:24:17 -04:00
jhoneill
d7dc6102e8 Merge remote-tracking branch 'upstream/master' 2018-07-28 23:04:47 +01:00
jhoneill
04fb8717b9 Extra parameter help in Set-Column needed a format fix 2018-07-27 23:28:44 +01:00
jhoneill
b7cc70bb0b Removed test which works locally but not in appveyor 2018-07-27 23:10:09 +01:00
jhoneill
bc2277cfdd Readme update after fix 2018-07-27 23:00:01 +01:00
jhoneill
d23d7950ab Readme update after fix 2018-07-27 22:48:15 +01:00
jhoneill
ff02988920 Readme fix 2018-07-27 22:44:10 +01:00
jhoneill
07f15f417f Help updates; formatting.ps1 duplicates other file contents, removed it. 2018-07-27 22:25:00 +01:00
jhoneill
e7099d78ab Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-07-26 15:40:06 +01:00
jhoneill
af13cfa1d0 unhide support in Export-Excel, return range in Set-Row/Column 2018-07-26 15:40:00 +01:00
jhoneill
2d22894858 unhide support in Export-Excel, return range in Set-Row/Column 2018-07-26 15:23:07 +01:00
jhoneill
5082d2120d Increases to test coverage (now >80%) 2018-07-26 00:57:41 +01:00
jhoneill
7995503bd3 Re-work of parameters in Set-Format (#400) 2018-07-25 21:36:14 +01:00
dfinke
51a32fb23e Removed the downloadstring 2018-07-20 15:24:48 -04:00
dfinke
1b8eb35437 added badge 2018-07-20 15:12:10 -04:00
jhoneill
51c6a98360 Internal Hyperlink support 2018-07-20 11:29:36 +01:00
dfinke
0e477ae6ef Removed VSTS build badge 2018-07-19 09:57:27 -04:00
dfinke
dda73a9138 added back badges 2018-07-19 09:54:11 -04:00
dfinke
cd7790153f update dictionary 2018-07-19 09:54:03 -04:00
Doug Finke
134dd2e172 Merge pull request #389 from jhoneill/master
Latest bunch of changes
2018-07-19 09:48:54 -04:00
jhoneill
245bbbd17b Tweak to Add-Conditional formatting 2018-07-18 19:53:02 +01:00
jhoneill
c9ad507966 All new Copy-ExcelWorksheet (+tests); fix sort in merge-Multiple 2018-07-18 16:32:10 +01:00
jhoneill
39ae2d9a53 Merge remote-tracking branch 'upstream/master' 2018-07-17 09:59:51 +01:00
jhoneill
d08fe73a79 Fixed bug with MoveAfter, param improvement on add-worksheet, tests++ 2018-07-17 09:46:47 +01:00
dfinke
8c8c852785 add short video demoing running tests and showing colorized results in Excel 2018-07-16 15:45:13 -04:00
Doug Finke
c2d5d97ffd Merge pull request #394 from dfinke/UnitTestRestAPI
Unit test rest api
2018-07-16 15:37:35 -04:00
dfinke
69b5b7f169 add psd1 check 2018-07-16 15:26:58 -04:00
dfinke
26f60aac28 up'd to 3 seconds for VSTS build servers 2018-07-16 12:46:57 -04:00
dfinke
f3f48c5ffc tweak badges 2018-07-16 12:40:16 -04:00
dfinke
7690494224 fix badge links 2018-07-16 12:39:50 -04:00
dfinke
d1164f2049 up'd the time for importing a spreadsheet. VSTS is a bit slower 2018-07-16 12:35:27 -04:00
dfinke
97156620ec updated badge placement 2018-07-16 12:26:01 -04:00
Doug Finke
e2c5e0b7cf Update README.md
Added VSTS build badge
2018-07-16 12:21:35 -04:00
dfinke
ffdb6533de wildcard the zip artifact 2018-07-15 12:43:48 -04:00
dfinke
32bb371145 add version and timestamp to zip artifact 2018-07-15 12:41:47 -04:00
dfinke
21ebf6fc73 Create the zip before 2018-07-15 12:35:51 -04:00
dfinke
6950463966 Create the zip file if tests pass 2018-07-15 12:33:03 -04:00
dfinke
dfe09612ff Create a zip artifact 2018-07-15 12:29:22 -04:00
dfinke
e5d2051ee8 Added badges back 2018-07-15 12:18:13 -04:00
dfinke
f785fe0566 Merge latest changes 2018-07-15 12:11:58 -04:00
dfinke
7cdd486c51 Add example of Merge-WorkShett 2018-07-15 11:39:06 -04:00
dfinke
d5ebfd5db4 Add a Copy Source example 2018-07-15 10:43:02 -04:00
dfinke
a9fc4aa613 updated 2018-07-15 10:13:41 -04:00
dfinke
4c4093f4de Added MoveSheets.ps1 example 2018-07-15 10:13:38 -04:00
dfinke
e6b5bf1937 Moved to __tests_ for CI 2018-07-15 09:48:17 -04:00
jhoneill
50c02cd8f1 Changes to match latest style rules (trailing spaces & position of null) 2018-07-15 11:19:53 +01:00
jhoneill
7de956b343 Fixed column name handling in merge-multipleWorksheets. More tests 2018-07-14 23:40:50 +01:00
jhoneill
3697d53bdd Put Get-ExcelColumnName Back in
Violated the "break nothing" rule by taking it out
2018-07-13 18:42:45 +01:00
jhoneill
cd1dcde6d0 Compare-Worksheet.tests.ps1 changed for latest style guide rules 2018-07-13 11:10:31 +01:00
jhoneill
82efbef979 Mod to export-excel to be appveyor friendly 2018-07-13 00:09:21 +01:00
jhoneill
87c2ff610d Added JoinWorksheet tests - addition to export-exceltests 2018-07-12 23:58:20 +01:00
jhoneill
2efb2c99f4 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-07-12 20:26:42 +01:00
jhoneill
08155c25f5 Merged two Join Worksheet sample directories 2018-07-12 20:26:37 +01:00
jhoneill
8579ce0b78 Merged two Join Worksheet sample directories 2018-07-12 20:21:52 +01:00
jhoneill
a563857bf3 Removed duplicate of compare-Worksheet.tests.psq 2018-07-12 20:17:38 +01:00
jhoneill
e699fba967 new Merge worksheet test and a bug fix for merge with wide data 2018-07-12 16:53:55 +01:00
jhoneill
3988658875 Merge remote-tracking branch 'upstream/master' 2018-07-12 16:49:49 +01:00
jhoneill
90942e4084 Improved tests for conversions, added quick chart support, and extended Send-SQLData 2018-07-12 10:49:29 +01:00
jhoneill
de72cfe8cd Removed GetExcelColumnName 2018-07-10 13:44:29 +01:00
jhoneill
bfbba90c44 Updates to Help text - mostly layout, inc making it VSCode freindly 2018-07-10 13:43:15 +01:00
jhoneill
9a81ddeebd Relayout of Setformat for readablity 2018-07-10 13:37:40 +01:00
dfinke
d3b7bfaa63 updated 2018-07-08 18:38:07 -04:00
dfinke
f18bca69eb updated 2018-07-08 18:37:30 -04:00
dfinke
6734b2bde1 Added badges, including version badge #385 2018-07-08 18:34:22 -04:00
jhoneill
75676a810f Fix to parameter set detection in Export-Excel
Parameter set problem was causing  append to demand a table name.
Tweaked eample in join worksheet, added another join worksheet sample
2018-07-07 12:00:14 +01:00
jhoneill
02878e1d4d Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-07-06 20:44:43 +01:00
jhoneill
82458edd7c Updates tests, extra parameters on join worksheet,
Also better distinction of "whole sheet" from "added data", optimization of add-cellvalue (see readme.md)
2018-07-06 20:41:41 +01:00
jhoneill
73af0b5dc9 Updated tests for export-excel 2018-07-06 19:57:17 +01:00
jhoneill
eec13674dc More tests; More parameters in Join Worksheet 2018-07-06 18:11:08 +01:00
dfinke
49dd9f20ee Removed commented [Uri] code 2018-07-06 09:06:07 -04:00
dfinke
7563185bd4 updated to use the new way that works 2018-07-05 19:46:59 -04:00
dfinke
c5270e9a47 Changed to IsWellFormedUriString . Can pass in a uri from csv 2018-07-05 17:19:21 -04:00
dfinke
6797f22775 fix spelling 2018-07-05 17:05:52 -04:00
dfinke
e5841d76c6 Added join sales data example 2018-07-05 16:58:36 -04:00
dfinke
fc4b1638da moved CmdletBinding after help comment. Examples were not displaying 2018-07-05 16:29:25 -04:00
dfinke
df220534d8 added Join-Worksheet to intallmodule 2018-07-05 16:26:43 -04:00
Doug Finke
fb888f239e Merge pull request #382 from dfinke/dcf-addCheckForLoadingPSD1
Added try/catch. Expanded aliases
2018-07-05 16:16:56 -04:00
dfinke
eac352c28a Added try/catch. Expanded aliases 2018-07-05 16:14:56 -04:00
dfinke
e4fbf7e92e bumped version to 5.1.0 2018-07-05 15:24:52 -04:00
dfinke
852575eb02 one more commented out 2018-07-05 14:39:01 -04:00
dfinke
ab9776fce2 commented out a couple of failing tests 2018-07-05 14:37:26 -04:00
dfinke
41eecf2528 commented out tests for -Show 2018-07-05 14:34:27 -04:00
dfinke
b722269584 Moved compare worksheet tests so appveyor will build 2018-07-05 14:28:13 -04:00
dfinke
e8d60c7040 added appveyor badge back 2018-07-05 14:27:02 -04:00
dfinke
35b722c7eb updated 2018-07-05 14:25:28 -04:00
Doug Finke
c5265c9f1c Merge pull request #378 from jhoneill/master
Bug fixes for add-chart and compare-ws
2018-07-05 14:21:25 -04:00
jhoneill
bd6a5a3faf ConvertToSQLInsert out of sync 2018-07-05 17:40:05 +01:00
jhoneill
892ba5d73f 5 July See readme.md 2018-07-05 17:34:12 +01:00
jhoneill
fae040ced1 Merge remote-tracking branch 'upstream/master' 2018-07-05 07:18:13 +01:00
dfinke
15e176fc2c added pics for databar 2018-07-04 19:51:59 -04:00
dfinke
c7a27d69ff Added monthly temo w/ databar 2018-07-04 19:51:50 -04:00
dfinke
b641ce915f udpated 2018-07-04 19:51:35 -04:00
jhoneill
06986df83a See readme.md 2018-07-05 00:29:28 +01:00
dfinke
6c449bd9ce Added sales report with databar 2018-07-04 19:15:34 -04:00
dfinke
b591a4ab18 Added try/catch 2018-07-04 18:58:40 -04:00
dfinke
35553baa05 Added try catch for psd1 loading so it can be copy pasted to the console 2018-07-04 18:51:25 -04:00
dfinke
a9aeca9550 Determines if ImportExcel is installed and if not loads the local psd1 2018-07-04 18:50:44 -04:00
jhoneill
a72d489707 bug fix for formatting font not working on second sheet 2018-07-04 16:50:47 +01:00
jhoneill
512812d774 Move Compare-WorkSheet tests into __tests__ fixed bug where font not set in difference sheet 2018-07-04 16:47:15 +01:00
dfinke
f18bcff4db commented out two asserts 2018-07-04 08:56:23 -04:00
dfinke
886d185e6f report # of tests correctly 2018-07-04 08:54:18 -04:00
dfinke
d24890cb97 execute compare worksheet tests on appveyor 2018-07-04 08:52:49 -04:00
dfinke
c707848eff testing to fail the appveyor build 2018-07-04 08:48:10 -04:00
dfinke
5ed078222c revert test updates 2018-07-03 19:41:47 -04:00
jhoneill
d7e4a0ec2f Merge remote-tracking branch 'upstream/master' 2018-07-02 09:18:44 +01:00
dfinke
cb42bdec15 skip killing excel for appveyor run 2018-06-30 21:36:50 -04:00
dfinke
13a09a8a99 updated path for psd1 2018-06-30 21:32:09 -04:00
dfinke
33cf407c10 Moved tests to __tests__ so Appveyor can automatically run them 2018-06-30 21:19:42 -04:00
dfinke
23e6180e03 VS Code did not flag these as conflicts. Could be operator error 2018-06-30 21:15:26 -04:00
Doug Finke
4227453299 Merge pull request #371 from dfinke/jhoneill-master
Merge jhoneill latest set of changes
2018-06-30 20:55:02 -04:00
dfinke
a154fb94f4 added for vs code spell checking 2018-06-30 20:47:14 -04:00
dfinke
91eabeada1 resolved merge conflicts 2018-06-30 20:46:54 -04:00
jhoneill
8ef93de26f Pester Tests & bug fix for compare-ws (see readme) 2018-06-29 16:41:06 +01:00
jhoneill
94659d3fc2 fix 2018-06-29 16:29:45 +01:00
jhoneill
192a1aef87 Merge branch 'master' of https://github.com/jhoneill/ImportExcel 2018-06-29 16:26:35 +01:00
jhoneill
9f7884f991 Compare worksheet: tests, small bug fix,
updated readme

New tests for compare worksheet, fixed a bug when the worksheets have different names and are not in the same file sometimes, you can't assume an order when they are diffed and the results grouped.
2018-06-29 16:13:46 +01:00
jhoneill
36fc9501eb Bug fix in compare worksheet 2018-06-29 16:08:00 +01:00
jhoneill
06c2210951 Delete Compare-WorkSheet.ps1
Trying to get the case consistent I create a duplicate file
2018-06-29 16:04:15 +01:00
jhoneill
acd66607d3 Compare worksheet test and bugfix
Bug when worksheets had different names and were in different files, sometimes colour was not set
2018-06-29 16:01:47 +01:00
jhoneill
6c24db9593 Added -PivotTableName to export excel (see also Readme.md) 2018-06-28 12:14:13 +01:00
dfinke
529ee035ec added date 2018-06-27 18:27:35 -04:00
dfinke
42938f68ba Bumped version to publish the correct branch 2018-06-26 12:51:27 -04:00
dfinke
0b2aaefac5 updated 2018-06-26 12:46:07 -04:00
jhoneill
a3693a7faf Many changes. Detailed on Readme.md under what's new 2018-06-25 14:06:43 +01:00
dfinke
bdea70c2f1 updated link 2018-06-24 10:00:22 -04:00
dfinke
036b9352f3 updated link 2018-06-24 09:59:12 -04:00
dfinke
54a387913d updated 2018-06-24 09:57:56 -04:00
dfinke
b2a884e7f1 Demo of the -UseMSSQLSyntax parameter 2018-06-24 09:57:00 -04:00
dfinke
050deb3506 Added UseMSSQLSyntax to code gen INSERT INTO format 2018-06-24 09:55:49 -04:00
dfinke
bb7a132344 tweaked 2018-06-24 09:53:20 -04:00
dfinke
2812917228 Demos the -PivotTableName param. Let's you name the sheet that the pivot table is created on 2018-06-24 09:32:22 -04:00
dfinke
8052b56387 Supports nameing the PivotTable sheet created 2018-06-24 09:31:26 -04:00
dfinke
fa887bbb24 Added example demos -AutoNameRange and PowerShell injecting Excel formulas 2018-06-24 08:38:34 -04:00
dfinke
62fe9f01ad updated what's new, fixed spelling 2018-06-24 08:25:01 -04:00
dfinke
3024217ca5 Added Merge-Worksheet.ps1 so the install and publish will include this file 2018-06-24 08:18:43 -04:00
dfinke
171783cac7 updated 2018-06-24 07:26:27 -04:00
jhoneill
f689c84d04 needed to sync
a
2018-06-22 21:36:46 +01:00
jhoneill
3508acb395 needed 2018-06-22 21:35:31 +01:00
jhoneill
d74cce91b6 Added join Worksheet
Moved "MoveTo…" functionality into Add-Worksheet and gave it copy worksheet functionality
Added create new file functionality to Open-ExcelPackage  - requires a -create switch so previous "Open for read if it exists" behaviour is kept. 
Fixed Conditional formatting so background pattern is "None" not "Solid" by default. 
Tidied comments and help in Merge and Compare 
Added Join Worksheet
Added Extra parameters, sanity check and help to New-PivotTableDefinition
2018-06-17 03:15:47 +01:00
dfinke
f7636b080a updated 2018-06-16 12:38:32 -04:00
dfinke
821864772a added how to work it 2018-06-16 10:09:46 -04:00
dfinke
2a0395965f Creates tests file and invokes the test runner 2018-06-16 10:03:42 -04:00
dfinke
71330f31e5 added - before gen of file 2018-06-16 09:20:17 -04:00
jhoneill
520bb079e5 Changes to Export-Excel & New-PivotTableDefinition
Export-Excel.ps1 
* Added MoveToStart, MoveBefore and MoveAfter Parameters 
* Added support for URI item properties. If a property is of type URI it is created as a hyperlink
* Fixed issue where AutoNamedRange, NamedRange, and TableName do not work when appending to a sheet which already contains the range(s) / table  
* Fixed issues when pivottables / charts already exist and an export tries to create them again.   
* Allowed PivotFilter and PivotDataToColumn, ChartHeight/width ChartRow/Column, ChartRow/ColumnPixelOffsets,  to be passed in -PivotTableDefinition and specified when running New-PivotDefinition. 
* Bad column-names specified for Pivots now generate warnings instead of throwing.
* Removed the need to specify a fill type when specifying a title background color
* "flattened out" small "called-once" function , add-title, convert-toNumber and Stop-ExcelProcess.
2018-06-15 10:23:06 +01:00
375 changed files with 78983 additions and 7317 deletions

17
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

11
.gitignore vendored
View File

@@ -2,6 +2,8 @@
Thumbs.db
ehthumbs.db
*.gitignore
# Folder config file
Desktop.ini
@@ -14,6 +16,8 @@ $RECYCLE.BIN/
*.msm
*.msp
*.dll
# Windows shortcuts
*.lnk
@@ -42,6 +46,7 @@ Network Trash Folder
Temporary Items
.apdisk
testExport.xlsx
test.xlsx
test.ps1
testPwd.xlsx
test.csv
@@ -55,3 +60,9 @@ test.xlsx
testCCFMT.ps1
testHide.ps1
ImportExcel.zip
.vscode/settings.json
~$*
# InstallModule.ps1
# PublishToGallery.ps1
.vscode/*

37
.vscode/spellright.dict vendored Normal file
View File

@@ -0,0 +1,37 @@
databar
appveyor
SqlDataToExcel
xlsm
jameseholt
params
robinmalik
scriptblock
headsphere
xelsirko
importexcel
Mihalicz
idx
Möller
redoz
dir
pivotables
WorkSheetname
Lachance-Guillemette
ints
pscookiemonster
ps
pwd
Nuget
EPPLus
intellisense
PivtoTableName
New-Excelchart
paypal
dll
enums
Numberformat
ChartDefiniton
hashtables
Agramont
AGramont
Jhoneill

View File

@@ -1,118 +0,0 @@
Function Add-ConditionalFormatting {
<#
.Synopsis
Adds contitional formatting to worksheet
.Example
$excel = $avdata | Export-Excel -Path (Join-path $FilePath "\Machines.XLSX" ) -WorksheetName "Server Anti-Virus" -AutoSize -FreezeTopRow -AutoFilter -PassThru
Add-ConditionalFormatting -WorkSheet $excel.Workbook.Worksheets[1] -Address "b":b1048576" -ForeGroundColor "RED" -RuleType ContainsText -ConditionValue "2003"
Add-ConditionalFormatting -WorkSheet $excel.Workbook.Worksheets[1] -Address "i2:i1048576" -ForeGroundColor "RED" -RuleType ContainsText -ConditionValue "Disabled"
$excel.Workbook.Worksheets[1].Cells["D1:G1048576"].Style.Numberformat.Format = [cultureinfo]::CurrentCulture.DateTimeFormat.ShortDatePattern
$excel.Workbook.Worksheets[1].Row(1).style.font.bold = $true
$excel.Save() ; $excel.Dispose()
Here Export-Excel is called with the -passThru parameter so the Excel Package object is stored in $Excel
The desired worksheet is selected and the then columns B and i are conditially formatted (excluding the top row) to show
Fixed formats are then applied to dates in columns D..G and the top row is formatted
Finally the workbook is saved and the Excel closed.
#>
Param (
#The worksheet where the format is to be applied
[Parameter(Mandatory = $true, ParameterSetName = "NamedRule")]
[Parameter(Mandatory = $true, ParameterSetName = "DataBar")]
[Parameter(Mandatory = $true, ParameterSetName = "ThreeIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FourIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSet")]
[OfficeOpenXml.ExcelWorksheet]$WorkSheet ,
#The area of the worksheet where the format is to be applied
[Parameter(Mandatory = $true, ParameterSetName = "NamedRule")]
[Parameter(Mandatory = $true, ParameterSetName = "DataBar")]
[Parameter(Mandatory = $true, ParameterSetName = "ThreeIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FourIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSet")]
[OfficeOpenXml.ExcelAddress]$Range ,
#One or more row(s), Column(s) and/or block(s) of cells to format
[Parameter(Mandatory = $true, ParameterSetName = "NamedRuleAddress")]
[Parameter(Mandatory = $true, ParameterSetName = "DataBarAddress")]
[Parameter(Mandatory = $true, ParameterSetName = "ThreeIconSetAddress")]
[Parameter(Mandatory = $true, ParameterSetName = "FourIconSetAddress")]
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSetAddress")]
$Address ,
#One of the standard named rules - Top / Bottom / Less than / Greater than / Contains etc
[Parameter(Mandatory = $true, ParameterSetName = "NamedRule", Position = 3)]
[Parameter(Mandatory = $true, ParameterSetName = "NamedRuleAddress", Position = 3)]
[OfficeOpenXml.ConditionalFormatting.eExcelConditionalFormattingRuleType]$RuleType ,
#Text colour for matching objects
[Alias("ForeGroundColour")]
[System.Drawing.Color]$ForeGroundColor,
#colour for databar type charts
[Parameter(Mandatory = $true, ParameterSetName = "DataBar")]
[Parameter(Mandatory = $true, ParameterSetName = "DataBarAddress")]
[Alias("DataBarColour")]
[System.Drawing.Color]$DataBarColor,
#One of the three-icon set types (e.g. Traffic Lights)
[Parameter(Mandatory = $true, ParameterSetName = "ThreeIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "ThreeIconSetAddress")]
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting3IconsSetType]$ThreeIconsSet,
#A four-icon set name
[Parameter(Mandatory = $true, ParameterSetName = "FourIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FourIconSetAddress")]
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting4IconsSetType]$FourIconsSet,
#A five-icon set name
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSet")]
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSetAddress")]
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting5IconsSetType]$FiveIconsSet,
#A value for the condition (e.g. "2000" if the test is 'lessthan 2000')
[string]$ConditionValue,
#A second value for the conditions like between x and Y
[string]$ConditionValue2,
#Background colour for matching items
[System.Drawing.Color]$BackgroundColor,
#Background pattern for matching items
[OfficeOpenXml.Style.ExcelFillStyle]$BackgroundPattern = [OfficeOpenXml.Style.ExcelFillStyle]::Solid,
#Secondary colour when a background pattern requires it
[System.Drawing.Color]$PatternColor,
#Sets the numeric format for matching items
$NumberFormat,
#Put matching items in bold face
[switch]$Bold,
#Put matching items in italic
[switch]$Italic,
#Underline matching items
[switch]$Underline,
#Strikethrough text of matching items
[switch]$StrikeThru
)
#Allow add conditional formatting to work like Set-Format (with single ADDRESS parameter) split it to get worksheet and Range of cells.
if ($Address -and -not $WorkSheet -and -not $Range) {
$WorkSheet = $Address.Worksheet[0]
$Range = $Address.Address
}
if ($rule -eq "Databar" -and -not $databarColor) {Write-Warning -Message "-DatabarColor must be specified for the Databar rule type" }
if ( $ThreeIconsSet) {$rule = $WorkSheet.ConditionalFormatting.AddThreeIconSet($Range , $ThreeIconsSet)}
elseif ($FourIconsSet) {$rule = $WorkSheet.ConditionalFormatting.AddFourIconSet( $Range , $FourIconsSet) }
elseif ($FiveIconsSet) {$rule = $WorkSheet.ConditionalFormatting.AddFiveIconSet( $Range , $IconType) }
elseif ($DataBarColor) {$rule = $WorkSheet.ConditionalFormatting.AddDatabar( $Range , $DataBarColor) }
else { $rule = ($WorkSheet.ConditionalFormatting)."Add$RuleType"($Range)}
if ($ConditionValue -and $RuleType -match "Top|Botom") {$rule.Rank = $ConditionValue }
if ($ConditionValue -and $RuleType -match "StdDev") {$rule.StdDev = $ConditionValue }
if ($ConditionValue -and $RuleType -match "Than|Equal|Expression") {$rule.Formula = $ConditionValue }
if ($ConditionValue -and $RuleType -match "Text|With") {$rule.Text = $ConditionValue }
if ($ConditionValue -and
$ConditionValue2 -and $RuleType -match "Between") {
$rule.Formula = $ConditionValue
$rule.Formula2 = $ConditionValue2
}
if ($NumberFormat) {$rule.Style.NumberFormat.Format = $NumberFormat }
if ($Underline) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::Single }
if ($Bold) {$rule.Style.Font.Bold = $true}
if ($Italic) {$rule.Style.Font.Italic = $true}
if ($StrikeThru) {$rule.Style.Font.Strike = $true}
if ($ForeGroundColor) {$rule.Style.Font.Color.color = $ForeGroundColor }
if ($BackgroundColor) {$rule.Style.Fill.BackgroundColor.color = $BackgroundColor }
if ($BackgroundPattern) {$rule.Style.Fill.PatternType = $BackgroundPattern }
if ($PatternColor) {$rule.Style.Fill.PatternColor.color = $PatternColor }
}

228
CI/CI.ps1 Normal file
View File

@@ -0,0 +1,228 @@
<#
.SYNOPSIS
Handel Continuous Integration Testing in AppVeyor and Azure DevOps Pipelines.
#>
param
(
# AppVeyor Only - Update AppVeyor build name.
[Switch]$Initialize,
# Installs the module and invoke the Pester tests with the current version of PowerShell.
[Switch]$Test,
# AppVeyor Only - Upload results to AppVeyor "Tests" tab.
[Switch]$Finalize,
# AppVeyor and Azure - Upload module as AppVeyor Artifact.
[Switch]$Artifact,
# Azure - Runs PsScriptAnalyzer against one or more folders and pivots the results to form a report.
[Switch]$Analyzer,
# Installs the module and invokes only the ModuleImport test.
# Used for validating that the module imports still when external dependencies are missing, e.g. mono-libgdiplus on macOS.
[Switch]$TestImportOnly
)
$ErrorActionPreference = 'Stop'
if ($Initialize) {
$Psd1 = (Get-ChildItem -File -Filter *.psd1 -Name -Path (Split-Path $PSScriptRoot)).PSPath
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path $Psd1 | Out-String)))).ModuleVersion
Update-AppveyorBuild -Version "$ModuleVersion ($env:APPVEYOR_BUILD_NUMBER) $env:APPVEYOR_REPO_BRANCH"
}
if ($Test -or $TestImportOnly) {
function Get-EnvironmentInfo {
if ([environment]::OSVersion.Platform -like "win*") {
# Get Windows Version
try {
$WinRelease, $WinVer = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId, CurrentMajorVersionNumber, CurrentMinorVersionNumber, CurrentBuildNumber, UBR
$WindowsVersion = "$($WinVer -join '.') ($WinRelease)"
}
catch {
$WindowsVersion = [System.Environment]::OSVersion.Version
}
#TODO FIXME BUG this gets the latest version of the .NET Framework on the machine (ok for powershell.exe), not the version of .NET CORE in use by PWSH.EXE
<#
$VersionFilePath = (Get-Process -Id $PID | Select-Object -ExpandProperty Modules |
Where-Object -Property modulename -eq "clrjit.dll").FileName
if (-not $VersionFilePath) {
$VersionFilePath = [System.Reflection.Assembly]::LoadWithPartialName("System.Core").location
}
(Get-ItemProperty -Path $VersionFilePath).VersionInfo |
Select-Object -Property @{n="Version"; e={$_.ProductName + " " + $_.FileVersion}}, ProductName, FileVersionRaw, FileName
#>
# Get .Net Version
# https://stackoverflow.com/questions/3487265/powershell-script-to-return-versions-of-net-framework-on-a-machine
$Lookup = @{
378389 = [version]'4.5'
378675 = [version]'4.5.1'
378758 = [version]'4.5.1'
379893 = [version]'4.5.2'
393295 = [version]'4.6'
393297 = [version]'4.6'
394254 = [version]'4.6.1'
394271 = [version]'4.6.1'
394802 = [version]'4.6.2'
394806 = [version]'4.6.2'
460798 = [version]'4.7'
460805 = [version]'4.7'
461308 = [version]'4.7.1'
461310 = [version]'4.7.1'
461808 = [version]'4.7.2'
461814 = [version]'4.7.2'
528040 = [version]'4.8'
528049 = [version]'4.8'
}
# For One True framework (latest .NET 4x), change the Where-Object match
# to PSChildName -eq "Full":
$DotNetVersion = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -name Version, Release -EA 0 |
Where-Object { $_.PSChildName -eq "Full" } |
Select-Object @{name = ".NET Framework"; expression = { $_.PSChildName } },
@{name = "Product"; expression = { $Lookup[$_.Release] } },
Version, Release
# Output
[PSCustomObject]($PSVersionTable + @{
ComputerName = $env:Computername
WindowsVersion = $WindowsVersion
'.Net Version' = '{0} (Version: {1}, Release: {2})' -f $DotNetVersion.Product, $DotNetVersion.Version, $DotNetVersion.Release
#EnvironmentPath = $env:Path
})
}
else {
# Output
[PSCustomObject]($PSVersionTable + @{
ComputerName = $env:Computername
#EnvironmentPath = $env:Path
})
}
}
'[Info] Testing On:'
Get-EnvironmentInfo
'[Progress] Installing Module.'
. .\CI\Install.ps1
'[Progress] Invoking Pester.'
$pesterParams = @{
OutputFile = ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion)
PassThru = $true
}
if ($TestImportOnly) {
$pesterParams['Tag'] = 'TestImportOnly'
}
else {
$pesterParams['ExcludeTag'] = 'TestImportOnly'
}
$testResults = Invoke-Pester @pesterParams
'Pester invocation complete!'
if ($testResults.FailedCount -gt 0) {
"Test failures:"
$testResults.TestResult | Where-Object {-not $_.Passed} | Format-List
Write-Error "$($testResults.FailedCount) Pester tests failed. Build cannot continue!"
}
}
if ($Finalize) {
'[Progress] Finalizing.'
$Failure = $false
$AppVeyorResultsUri = 'https://ci.appveyor.com/api/testresults/nunit/{0}' -f $env:APPVEYOR_JOB_ID
foreach ($TestResultsFile in Get-ChildItem -Path 'TestResultsPS*.xml') {
$TestResultsFilePath = $TestResultsFile.FullName
"[Info] Uploading Files: $AppVeyorResultsUri, $TestResultsFilePath."
# Add PowerShell version to test results
$PSVersion = $TestResultsFile.Name.Replace('TestResults', '').Replace('.xml', '')
[Xml]$Xml = Get-Content -Path $TestResultsFilePath
Select-Xml -Xml $Xml -XPath '//test-case' | ForEach-Object { $_.Node.name = "$PSVersion " + $_.Node.name }
$Xml.OuterXml | Out-File -FilePath $TestResultsFilePath
#Invoke-RestMethod -Method Post -Uri $AppVeyorResultsUri -Body $Xml
[Net.WebClient]::new().UploadFile($AppVeyorResultsUri, $TestResultsFilePath)
if ($Xml.'test-results'.failures -ne '0') {
$Failure = $true
}
}
if ($Failure) {
throw 'Tests failed.'
}
}
if ($Artifact) {
# Get Module Info
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path (Split-Path $PSScriptRoot)))
$ModulePath = (Get-Module -Name $ModuleName -ListAvailable).ModuleBase | Split-Path
$VersionLocal = ((Get-Module -Name $ModuleName -ListAvailable).Version | Measure-Object -Maximum).Maximum
"[Progress] Artifact Start for Module: $ModuleName, Version: $VersionLocal."
if ($env:APPVEYOR) {
$ZipFileName = "{0} {1} {2} {3:yyyy-MM-dd HH-mm-ss}.zip" -f $ModuleName, $VersionLocal, $env:APPVEYOR_REPO_BRANCH, (Get-Date)
$ZipFileName = $ZipFileName -replace ("[{0}]" -f [RegEx]::Escape([IO.Path]::GetInvalidFileNameChars() -join ''))
$ZipFileFullPath = Join-Path -Path $PSScriptRoot -ChildPath $ZipFileName
"[Info] Artifact. $ModuleName, ZipFileName: $ZipFileName."
#Compress-Archive -Path $ModulePath -DestinationPath $ZipFileFullPath
[System.IO.Compression.ZipFile]::CreateFromDirectory($ModulePath, $ZipFileFullPath, [System.IO.Compression.CompressionLevel]::Optimal, $true)
Push-AppveyorArtifact $ZipFileFullPath -DeploymentName $ModuleName
}
elseif ($env:AGENT_NAME) {
#Write-Host "##vso[task.setvariable variable=ModuleName]$ModuleName"
Copy-Item -Path $ModulePath -Destination $env:Build_ArtifactStagingDirectory -Recurse
}
}
if ($Analyzer) {
if (!(Get-Module -Name PSScriptAnalyzer -ListAvailable)) {
'[Progress] Installing PSScriptAnalyzer.'
Install-Module -Name PSScriptAnalyzer -Force
}
if ($env:System_PullRequest_TargetBranch) {
'[Progress] Get target branch.'
$TempGitClone = Join-Path ([IO.Path]::GetTempPath()) (New-Guid)
Copy-Item -Path $PWD -Destination $TempGitClone -Recurse
(Get-Item (Join-Path $TempGitClone '.git')).Attributes += 'Hidden'
"[Progress] git clean."
git -C $TempGitClone clean -f
"[Progress] git reset."
git -C $TempGitClone reset --hard
"[Progress] git checkout."
git -C $TempGitClone checkout -q $env:System_PullRequest_TargetBranch
$DirsToProcess = @{ 'Pull Request' = $PWD ; $env:System_PullRequest_TargetBranch = $TempGitClone }
}
else {
$DirsToProcess = @{ 'GitHub' = $PWD }
}
"[Progress] Running Script Analyzer."
$AnalyzerResults = $DirsToProcess.GetEnumerator() | ForEach-Object {
$DirName = $_.Key
Write-Verbose "[Progress] Running Script Analyzer on $DirName."
Invoke-ScriptAnalyzer -Path $_.Value -Recurse -ErrorAction SilentlyContinue |
Add-Member -MemberType NoteProperty -Name Location -Value $DirName -PassThru
}
if ($AnalyzerResults) {
if (!(Get-Module -Name ImportExcel -ListAvailable)) {
'[Progress] Installing ImportExcel.'
Install-Module -Name ImportExcel -Force
}
'[Progress] Creating ScriptAnalyzer.xlsx.'
$ExcelParams = @{
Path = 'ScriptAnalyzer.xlsx'
WorksheetName = 'FullResults'
Now = $true
Activate = $true
Show = $false
}
$PivotParams = @{
PivotTableName = 'BreakDown'
PivotData = @{RuleName = 'Count' }
PivotRows = 'Severity', 'RuleName'
PivotColumns = 'Location'
PivotTotals = 'Rows'
}
Remove-Item -Path $ExcelParams['Path'] -ErrorAction SilentlyContinue
$PivotParams['PivotChartDefinition'] = New-ExcelChartDefinition -ChartType 'BarClustered' -Column (1 + $DirsToProcess.Count) -Title "Script analysis" -LegendBold
$ExcelParams['PivotTableDefinition'] = New-PivotTableDefinition @PivotParams
$AnalyzerResults | Export-Excel @ExcelParams
'[Progress] Analyzer finished.'
}
else {
"[Info] Invoke-ScriptAnalyzer didn't return any problems."
}
}

191
CI/Install.ps1 Normal file
View File

@@ -0,0 +1,191 @@
<#
.SYNOPSIS
Installs module from Git clone or directly from GitHub.
File must not have BOM for GitHub deploy to work.
#>
[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
# Path to install the module to, if not provided -Scope used.
[Parameter(Mandatory, ParameterSetName = 'ModulePath')]
[ValidateNotNullOrEmpty()]
[String]$ModulePath,
# Path to install the module to, PSModulePath "CurrentUser" or "AllUsers", if not provided "CurrentUser" used.
[Parameter(Mandatory, ParameterSetName = 'Scope')]
[ValidateSet('CurrentUser', 'AllUsers')]
[string]
$Scope = 'CurrentUser',
# Get module from GitHub instead of local Git clone, for example "https://raw.githubusercontent.com/ili101/Module.Template/master/Install.ps1"
[ValidateNotNullOrEmpty()]
[Uri]$FromGitHub
)
# Set Files and Folders patterns to Include/Exclude.
$IncludeFiles = @(
'EPPlus.dll',
'*.psd1',
'*.psm1',
'*.ps1'
'Charting',
'en-US',
'Examples',
'Public',
'Private',
'images',
'InferData',
'InternalFunctions',
'Pivot',
'spikes',
'Testimonials',
'README.md',
'LICENSE.txt'
)
$ExcludeFiles = @(
'Install.ps1',
'InstallModule.ps1',
'PublishToGallery.PS1'
)
function Invoke-MultiLike {
[alias("LikeAny")]
[CmdletBinding()]
param
(
$InputObject,
[Parameter(Mandatory)]
[String[]]$Filters,
[Switch]$Not
)
$FiltersRegex = foreach ($Filter In $Filters) {
$Filter = [regex]::Escape($Filter)
if ($Filter -match "^\\\*") {
$Filter = $Filter.Remove(0, 2)
}
else {
$Filter = '^' + $Filter
}
if ($Filter -match "\\\*$") {
$Filter = $Filter.Substring(0, $Filter.Length - 2)
}
else {
$Filter = $Filter + '$'
}
$Filter
}
if ($Not) {
$InputObject -notmatch ($FiltersRegex -join '|').replace('\*', '.*').replace('\?', '.')
}
else {
$InputObject -match ($FiltersRegex -join '|').replace('\*', '.*').replace('\?', '.')
}
}
Push-Location "$PSScriptRoot\.."
try {
Write-Verbose -Message "Module installation started. Installing from $PWD"
if (!$ModulePath) {
if ($Scope -eq 'CurrentUser') {
$ModulePathIndex = 0
}
else {
$ModulePathIndex = 1
}
if ($IsLinux -or $IsMacOS) {
$ModulePathSeparator = ':'
}
else {
$ModulePathSeparator = ';'
}
$ModulePath = ($env:PSModulePath -split $ModulePathSeparator)[$ModulePathIndex]
}
Write-Verbose -Message "Installing to $ModulePath"
# Get $ModuleName, $TargetPath, [$Links]
if ($FromGitHub) {
# Fix Could not create SSL/TLS secure channel
#$SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol
#[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$WebClient = [System.Net.WebClient]::new()
$GitUri = $FromGitHub.AbsolutePath.Split('/')[1, 2] -join '/'
$GitBranch = $FromGitHub.AbsolutePath.Split('/')[3]
$Links = (Invoke-RestMethod -Uri "https://api.github.com/repos/$GitUri/contents" -Body @{ref = $GitBranch }) | Where-Object { (LikeAny $_.name $IncludeFiles) -and (LikeAny $_.name $ExcludeFiles -Not) }
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension(($Links | Where-Object { $_.name -like '*.psm1' }).name)
$ModuleVersion = (. ([Scriptblock]::Create((Invoke-WebRequest -Uri ($Links | Where-Object { $_.name -eq "$ModuleName.psd1" }).download_url)))).ModuleVersion
}
else {
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path $PWD))
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path (Join-Path $PWD "$ModuleName.psd1") | Out-String)))).ModuleVersion
}
$TargetPath = Join-Path -Path $ModulePath -ChildPath $ModuleName
$TargetPath = Join-Path -Path $TargetPath -ChildPath $ModuleVersion
# Create Directory
if (-not (Test-Path -Path $TargetPath)) {
$null = New-Item -Path $TargetPath -ItemType Directory -ErrorAction Stop
Write-Verbose -Message ('Created module folder: "{0}"' -f $TargetPath)
}
# Copy Files
if ($FromGitHub) {
foreach ($Link in $Links) {
$TargetPathItem = Join-Path -Path $TargetPath -ChildPath $Link.name
if ($Link.type -ne 'dir') {
$WebClient.DownloadFile($Link.download_url, $TargetPathItem)
Write-Verbose -Message ('Installed module file: "{0}"' -f $Link.name)
}
else {
if (-not (Test-Path -Path $TargetPathItem)) {
$null = New-Item -Path $TargetPathItem -ItemType Directory -ErrorAction Stop
Write-Verbose -Message 'Created module folder: "{0}"' -f $TargetPathItem
}
$SubLinks = (Invoke-RestMethod -Uri $Link.git_url -Body @{recursive = '1' }).tree
foreach ($SubLink in $SubLinks) {
$TargetPathSub = Join-Path -Path $TargetPathItem -ChildPath $SubLink.path
if ($SubLink.'type' -EQ 'tree') {
if (-not (Test-Path -Path $TargetPathSub)) {
$null = New-Item -Path $TargetPathSub -ItemType Directory -ErrorAction Stop
Write-Verbose -Message 'Created module folder: "{0}"' -f $TargetPathSub
}
}
else {
$WebClient.DownloadFile(
('https://raw.githubusercontent.com/{0}/{1}/{2}/{3}' -f $GitUri, $GitBranch, $Link.name, $SubLink.path),
$TargetPathSub
)
}
}
}
}
}
else {
Get-ChildItem -Path $PWD -Exclude $ExcludeFiles | Where-Object { LikeAny $_.Name $IncludeFiles } | ForEach-Object {
if ($_.Attributes -ne 'Directory') {
Copy-Item -Path $_ -Destination $TargetPath
Write-Verbose -Message ('Installed module file "{0}"' -f $_)
}
else {
Copy-Item -Path $_ -Destination $TargetPath -Recurse -Force
Write-Verbose -Message ('Installed module folder "{0}"' -f $_)
}
}
}
# Import Module
Write-Verbose -Message "$ModuleName module installation successful to $TargetPath"
Import-Module -Name $ModuleName -Force
Write-Verbose -Message "Module installed"
}
catch {
throw ('Failed installing module "{0}". Error: "{1}" in Line {2}' -f $ModuleName, $_, $_.InvocationInfo.ScriptLineNumber)
}
finally {
#if ($FromGitHub) {
# [Net.ServicePointManager]::SecurityProtocol = $SecurityProtocol
#}
Write-Verbose -Message 'Module installation end'
Pop-Location
}

30
CI/InstallPowerShell.ps1 Normal file
View File

@@ -0,0 +1,30 @@
<#
.SYNOPSIS
Installs PowerShell Core on Windows.
#>
[CmdLetBinding()]
Param
(
# Version to install in the format from the .msi, for example "7.0.0-preview.1"
[String]$Version
)
$ErrorActionPreference = 'Stop'
if (-not $Version) {
$Version = (Invoke-RestMethod https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/metadata.json).StableReleaseTag
}
$Version = $Version -replace "^v",""
'[Progress] Downloading PowerShell Core.'
$MsiPath = Join-Path $env:TEMP "PowerShell-$Version-win-x64.msi"
[System.Net.WebClient]::new().DownloadFile("https://github.com/PowerShell/PowerShell/releases/download/v$Version/PowerShell-$Version-win-x64.msi", $MsiPath)
'[Progress] Installing PowerShell Core.'
Start-Process 'msiexec.exe' -Wait -ArgumentList "/i $MsiPath /quiet"
Remove-Item -Path $MsiPath
$PowerShellFolder = $Version[0]
if ($Version -like "*preview*") {
$PowerShellFolder += '-preview'
}
$env:Path = "$env:ProgramFiles\PowerShell\$PowerShellFolder;$env:Path"
'[Progress] PowerShell Core Installed.'

266
CI/PS-CI.ps1 Normal file
View File

@@ -0,0 +1,266 @@
[cmdletbinding(DefaultParameterSetName = 'Scope')]
Param(
[Parameter(Mandatory = $true, ParameterSetName = 'ModulePath')]
[ValidateNotNullOrEmpty()]
[String]$ModulePath,
# Path to install the module to, PSModulePath "CurrentUser" or "AllUsers", if not provided "CurrentUser" used.
[Parameter(ParameterSetName = 'Scope')]
[ValidateSet('CurrentUser', 'AllUsers')]
[string]
$Scope = 'CurrentUser',
[Parameter(Mandatory = $true, ParameterSetName = 'PreCheckOnly')]
[switch]$PreCheckOnly,
[Parameter(ParameterSetName = 'ModulePath')]
[Parameter(ParameterSetName = 'Scope')]
[switch]$SkipPreChecks,
[Parameter(ParameterSetName = 'ModulePath')]
[Parameter(ParameterSetName = 'Scope')]
[switch]$SkipPostChecks,
[Parameter(ParameterSetName = 'ModulePath')]
[Parameter(ParameterSetName = 'Scope')]
[switch]$SkipPesterTests,
[Parameter(ParameterSetName = 'ModulePath')]
[Parameter(ParameterSetName = 'Scope')]
[switch]$SkipHelp,
[Parameter(ParameterSetName = 'ModulePath')]
[Parameter(ParameterSetName = 'Scope')]
[switch]$CleanModuleDir
)
Function Show-Warning {
param(
[Parameter(Position = 0, ValueFromPipeline = $true)]
$message
)
process {
write-output "##vso[task.logissue type=warning]File $message"
$message >> $script:warningfile
}
}
if ($PSScriptRoot) {
$workingdir = Split-Path -Parent $PSScriptRoot
Push-Location $workingdir
}
$psdpath = Get-Item "*.psd1"
if (-not $psdpath -or $psdpath.count -gt 1) {
if ($PSScriptRoot) { Pop-Location }
throw "Did not find a unique PSD file "
}
else {
try { $null = Test-ModuleManifest -Path $psdpath -ErrorAction stop }
catch { throw $_ ; return }
$ModuleName = $psdpath.Name -replace '\.psd1$' , ''
$Settings = $(& ([scriptblock]::Create(($psdpath | Get-Content -Raw))))
$approvedVerbs = Get-Verb | Select-Object -ExpandProperty verb
$script:warningfile = Join-Path -Path $pwd -ChildPath "warnings.txt"
}
#pre-build checks - manifest found, files in it found, public functions and aliases loaded in it. Public functions correct.
if (-not $SkipPreChecks) {
#Check files in the manifest are present
foreach ($file in $Settings.FileList) {
if (-not (Test-Path $file)) {
Show-Warning "File $file in the manifest file list is not present"
}
}
#Check files in public have Approved_verb-noun names and are 1 function using the file name as its name with
# its name and any alias names in the manifest; function should have a param block and help should be in an MD file
# We will want a regex which captures from "function verb-noun {" to its closing "}"
# need to match each { to a } - $reg is based on https://stackoverflow.com/questions/7898310/using-regex-to-balance-match-parenthesis
$reg = [Regex]::new(@"
function\s*[-\w]+\s*{ # The function name and opening '{'
(?:
[^{}]+ # Match all non-braces
|
(?<open> { ) # Match '{', and capture into 'open'
|
(?<-open> } ) # Match '}', and delete the 'open' capture
)*
(?(open)(?!)) # Fails if 'open' stack isn't empty
} # Functions closing '}'
"@, 57) # 57 = compile,multi-line ignore case and white space.
foreach ($file in (Get-Item .\Public\*.ps1)) {
$name = $file.name -replace (".ps1", "")
if ($name -notmatch ("(\w+)-\w+")) { Show-Warning "$name in the public folder is not a verb-noun name" }
elseif ($Matches[1] -notin $approvedVerbs) { Show-Warning "$name in the public folder does not start with an approved verb" }
if (-not ($Settings.FunctionsToExport -ceq $name)) {
Show-Warning ('File {0} in the public folder does not match an exported function in the manifest' -f $file.name)
}
else {
$fileContent = Get-Content $file -Raw
$m = $reg.Matches($fileContent)
if ($m.Count -eq 0) { Show-Warning ('Could not find {0} function in {1}' -f $name, $file.name); continue }
elseif ($m.Count -ge 2) { Show-Warning ('Multiple functions in {0}' -f $item.name) ; Continue }
elseif ($m[0] -imatch "^\function\s" -and
$m[0] -cnotmatch "^\w+\s+$name") { Show-Warning ('function name does not match file name for {0}' -f $file.name) }
#$m[0] runs form the f of function to its final } -find the section up to param, check for aliases & comment-based help
$m2 = [regex]::Match($m[0], "^.*?param", 17) # 17 = multi-line, ignnore case
if (-not $m2.Success) { Show-Warning "function $name has no param() block" }
else {
if ($m2.value -match "(?<!#\s*)\[\s*Alias\(\s*.([\w-]+).\s*\)\s*\]") {
foreach ($a in ($Matches[1] -split '\s*,\s*')) {
$a = $a -replace "'", "" -replace '"', ''
if (-not ($Settings.AliasesToExport -eq $a)) {
Show-Warning "Function $name has alias $a which is not in the manifest"
}
}
}
if ($m2.value -match "\.syopsis|\.Description|\.Example") {
Show-Warning "Function $name appears to have comment based help."
}
}
}
}
#Warn about functions which are exported but not found in public
$notFromPublic = $Settings.FunctionsToExport.Where( { -not (Test-Path ".\public\$_.ps1") })
If ($notFromPublic) { Show-Warning ('Exported function(s) {0} are not loaded from the Public folder' -f ($notFromPublic -join ', ')) }
}
if ($PreCheckOnly) { return }
#region build, determine module path if necessary, create target directory if necessary, copy files based on manifest, build help
try {
if ($ModulePath) {
$ModulePath = $ModulePath -replace "\\$|/$", ""
}
else {
if ($IsLinux -or $IsMacOS) { $ModulePathSeparator = ':' }
else { $ModulePathSeparator = ';' }
if ($Scope -eq 'CurrentUser') { $dir = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::UserProfile) }
else { $dir = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::ProgramFiles) }
$ModulePath = ($env:PSModulePath -split $ModulePathSeparator).where( { $_ -like "$dir*" }, "First", 1)
$ModulePath = Join-Path -Path $ModulePath -ChildPath $ModuleName
$ModulePath = Join-Path -Path $ModulePath -ChildPath $Settings.ModuleVersion
}
# Clean-up / Create Directory
if (-not (Test-Path -Path $ModulePath)) {
$null = New-Item -Path $ModulePath -ItemType Directory -ErrorAction Stop
'Created module folder: "{0}"' -f $ModulePath
}
elseif ($CleanModuleDir) {
'{0} exists - cleaning before copy' -f $ModulePath
Get-ChildItem -Path $ModulePath | Remove-Item -Force -Recurse
}
'Copying files to: "{0}"' -f $ModulePath
$outputFile = $psdpath | Copy-Item -Destination $ModulePath -PassThru
$outputFile.fullname
foreach ($file in $Settings.FileList) {
if ($file -like '.\*') {
$dest = ($file -replace '\.\\', "$ModulePath\")
if (-not (Test-Path -PathType Container (Split-Path -Parent $dest))) {
$null = New-item -Type Directory -Path (Split-Path -Parent $dest)
}
}
else { $dest = $ModulePath }
Copy-Item -Path $file -Destination $dest -Force -Recurse
}
if ((Test-Path -PathType Container "mdHelp") -and -not $SkipHelp) {
if (-not (Get-Module -ListAvailable platyPS)) {
'Installing Platyps to build help files'
Install-Module -Name platyPS -Force -SkipPublisherCheck
}
$platypsInfo = Import-Module platyPS -PassThru -force
Get-ChildItem .\mdHelp -Directory | ForEach-Object {
'Building help for language ''{0}'', using {1} V{2}.' -f $_.Name, $platypsInfo.Name, $platypsInfo.Version
$Null = New-ExternalHelp -Path $_.FullName -OutputPath (Join-Path $ModulePath $_.Name) -Force
}
}
#Leave module path for things which follow.
$env:PSNewBuildModule = $ModulePath
}
catch {
if ($PSScriptRoot) { Pop-Location }
throw ('Failed installing module "{0}". Error: "{1}" in Line {2}' -f $ModuleName, $_, $_.InvocationInfo.ScriptLineNumber)
}
finally {
if (-not $outputFile -or -not (Test-Path $outputFile)) { throw "Failed to create module" }
}
#endregion
if ($env:Build_ArtifactStagingDirectory) {
Copy-Item -Path (split-path -Parent $ModulePath) -Destination $env:Build_ArtifactStagingDirectory -Recurse
}
#Check valid command names, help, run script analyzer over the files in the module directory
if (-not $SkipPostChecks) {
try { $outputFile | Import-Module -Force -ErrorAction stop }
catch {
if ($PSScriptRoot) { Pop-Location }
throw "New module failed to load"
}
$commands = Get-Command -Module $ModuleName -CommandType function, Cmdlet
$commands.where( { $_.name -notmatch "(\w+)-\w+" -or $Matches[1] -notin $approvedVerbs }) | ForEach-Object {
Show-Warning ('{0} does not meet the ApprovedVerb-Noun naming rules' -f $_.name)
}
$helpless = $commands | Get-Help | Where-Object { $_.Synopsis -match "^\s+$($_.name)\s+\[" } | Select-Object -ExpandProperty name
foreach ($command in $helpless ) {
Show-Warning ('On-line help is missing for {0}.' -f $command)
}
if (-not (Get-Module -Name PSScriptAnalyzer -ListAvailable)) {
Install-Module -Name PSScriptAnalyzer -Force
}
$PSSAInfo = Import-module -Name PSScriptAnalyzer -PassThru -force
"Running {1} V{2} against '{0}' " -f $ModulePath , $PSSAInfo.name, $PSSAInfo.Version
$AnalyzerResults = Invoke-ScriptAnalyzer -Path $ModulePath -Recurse -ErrorAction SilentlyContinue
if ($AnalyzerResults) {
if (-not (Get-Module -Name ImportExcel -ListAvailable)) {
#ironically we use this to build import-excel Shouldn't need this there!
'Installing ImportExcel.'
Install-Module -Name ImportExcel -Force
}
$chartDef = New-ExcelChartDefinition -ChartType 'BarClustered' -Column 2 -Title "Script analysis" -LegendBold
$ExcelParams = @{
Path = (Join-Path $pwd 'ScriptAnalyzer.xlsx')
WorksheetName = 'FullResults'
TableStyle = 'Medium6'
AutoSize = $true
Activate = $true
PivotTableDefinition = @{BreakDown = @{
PivotData = @{RuleName = 'Count' }
PivotRows = 'Severity', 'RuleName'
PivotTotals = 'Rows'
PivotChartDefinition = $chartDef
}
}
}
Remove-Item -Path $ExcelParams['Path'] -ErrorAction SilentlyContinue
$AnalyzerResults | Export-Excel @ExcelParams
if (Test-Path $ExcelParams['Path']) {
"Try to uploadfile {0}" -f $ExcelParams['Path']
"##vso[task.uploadfile]{0}" -f $ExcelParams['Path']
}
}
}
if (Test-Path $script:warningfile) {
"Try to uploadfile {0}" -f $script:warningfile
"##vso[task.uploadfile]{0}" -f $script:warningfile
}
#if there are test files, run pester (unless told not to)
if (-not $SkipPesterTests -and (Get-ChildItem -Recurse *.tests.ps1)) {
Import-Module -Force $outputFile
if (-not (Get-Module -ListAvailable pester | Where-Object -Property version -ge ([version]::new(4, 4, 1)))) {
Install-Module Pester -Force -SkipPublisherCheck -MaximumVersion 4.99.99
}
$pester = Import-Module Pester -PassThru
$pester
$pesterOutputPath = Join-Path $pwd -ChildPath ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion)
if ($PSScriptRoot) { Pop-Location }
if ($pester.Version.Major -lt 5) {Invoke-Pester -OutputFile $pesterOutputPath}
else {
$pesterArgs = [PesterConfiguration]::Default
$pesterArgs.Run.Exit = $true
$pesterArgs.Output.Verbosity = "Normal"
$pesterArgs.TestResult.Enabled = $true
$pesterArgs.TestResult.OutputPath = $pesterOutputPath
Invoke-Pester -Configuration $pesterArgs
}
}
elseif ($PSScriptRoot) { Pop-Location }

106
CI/Publish.ps1 Normal file
View File

@@ -0,0 +1,106 @@
<#
.SYNOPSIS
Deploy module to PowerShellGallery.
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "Success")]
[CmdletBinding(DefaultParameterSetName = 'ModuleName')]
Param
(
# The name of the installed module to be deployed, if not provided the name of the .psm1 file in the parent folder is used.
[Parameter(ParameterSetName = 'ModuleName')]
[ValidateNotNullOrEmpty()]
[String]$ModuleName,
# Publish module from path (module folder), if not provided -ModuleName is used.
[Parameter(Mandatory, ParameterSetName = 'Path')]
[ValidateNotNullOrEmpty()]
[String]$Path,
# Key for PowerShellGallery deployment, if not provided $env:NugetApiKey is used.
[ValidateNotNullOrEmpty()]
[String]$NugetApiKey,
# Skip Version verification for PowerShellGallery deployment, can be used for first release.
[Switch]$Force
)
$ErrorActionPreference = 'Stop'
if ($Path) {
$Path = Resolve-Path -Path $Path
if ($Path.Count -ne 1) {
throw ('Invalid Path, $Path.Count: {0}.' -f $Path.Count)
}
$Psd1Path = (Get-ChildItem -File -Filter *.psd1 -Path $Path -Recurse)[0].FullName
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension($Psd1Path)
$VersionLocal = (. ([Scriptblock]::Create((Get-Content -Path $Psd1Path | Out-String)))).ModuleVersion
}
else {
# Get Script Root
if ($PSScriptRoot) {
$ScriptRoot = $PSScriptRoot
}
elseif ($psISE.CurrentFile.IsUntitled -eq $false) {
$ScriptRoot = Split-Path -Path $psISE.CurrentFile.FullPath
}
elseif ($null -ne $psEditor.GetEditorContext().CurrentFile.Path -and $psEditor.GetEditorContext().CurrentFile.Path -notlike 'untitled:*') {
$ScriptRoot = Split-Path -Path $psEditor.GetEditorContext().CurrentFile.Path
}
else {
$ScriptRoot = '.'
}
# Get Module Info
if (!$ModuleName) {
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path (Split-Path $ScriptRoot)))
}
$VersionLocal = ((Get-Module -Name $ModuleName -ListAvailable).Version | Measure-Object -Maximum).Maximum
}
"[Progress] Deploy Script Start for Module: $ModuleName, Version: $VersionLocal."
# Deploy to PowerShell Gallery if run locally OR from AppVeyor & GitHub master
if (!$env:APPVEYOR -or $env:APPVEYOR_REPO_BRANCH -eq 'master') {
if ($env:APPVEYOR) {
$Success = $true
$AppVeyorProject = Invoke-RestMethod -Uri "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG"
$AppVeyorProject.build.jobs | ForEach-Object {
'[Info] AppVeyor job name: "{0}", Id: {1}, Status: {2}.' -f $_.name, $_.jobId, $_.status
if ($_.jobId -ne $env:APPVEYOR_JOB_ID -and $_.status -ne "success") {
$Success = $false
}
}
if (!$Success) {
'[Info] There are filed jobs skipping PowerShell Gallery deploy.'
break
}
}
try {
$VersionGallery = (Find-Module -Name $ModuleName -ErrorAction Stop).Version
}
catch {
if ($_.Exception.Message -notlike 'No match was found for the specified search criteria*' -or !$Force) {
throw $_
}
}
"[Info] PowerShellGallery. $ModuleName, VersionGallery: $VersionGallery, VersionLocal: $VersionLocal."
if ($VersionGallery -lt $VersionLocal -or $Force) {
if (!$NugetApiKey) {
$NugetApiKey = $env:NugetApiKey
}
"[Info] PowerShellGallery. Deploying $ModuleName version $VersionLocal."
if ($Path) {
Publish-Module -NuGetApiKey $NugetApiKey -Path $Path
}
else {
Publish-Module -NuGetApiKey $NugetApiKey -Name $ModuleName -RequiredVersion $VersionLocal
}
}
else {
'[Info] PowerShellGallery Deploy Skipped (Version Check).'
}
}
else {
'[Info] PowerShellGallery Deploy Skipped.'
}
'[Progress] Deploy Ended.'

6
CI/PublishToGallery.ps1 Normal file
View File

@@ -0,0 +1,6 @@
$p = @{
Name = "ImportExcel"
NuGetApiKey = $NuGetApiKey
}
Publish-Module @p

View File

@@ -0,0 +1,54 @@

function Test-SingleFunction {
param (
[parameter(ValueFromPipeline=$true)]
$path )
begin {
$psd = Get-Content -Raw "$PSScriptRoot\..\ImportExcel.psd1"
$exportedFunctions = (Invoke-Command ([scriptblock]::Create($psd))).functionsToExport
$reg = [Regex]::new(@"
function\s*[-\w]+\s*{ # The function name and opening '{'
(?:
[^{}]+ # Match all non-braces
|
(?<open> { ) # Match '{', and capture into 'open'
|
(?<-open> } ) # Match '}', and delete the 'open' capture
)*
(?(open)(?!)) # Fails if 'open' stack isn't empty
} # Functions closing '}'
"@, 57) # 41 = compile ignore case and white space.
$reg2 = [Regex]::new(@"
^function\s*[-\w]+\s*{ # The function name and opening '{'
(
\#.*?[\r\n]+ # single line comment
| # or
\s*<\#.*?\#> # <#comment block#>
| # or
\s*\[.*?\] # [attribute tags]
)*
"@, 57)
# 43 = compile, multi-line, ignore case and white space.
}
process {
$item = Get-item $Path
$name = $item.Name -replace "\.\w+$",""
Write-Verbose $name
$file = Get-Content $item -Raw
$m = $reg.Matches($file)
#based on https://stackoverflow.com/questions/7898310/using-regex-to-balance-match-parenthesis
if ($m.Count -eq 0) {return "Could not find $name function in $($item.name)"}
elseif ($m.Count -ge 2) {return "Multiple functions in $($item.name)"}
elseif ($exportedFunctions -cnotcontains $name) {return "$name not exported (or in the wrong case)"}
elseif ($m[0] -cnotmatch "^\w+\s+$name") {return "function $name in wrong case"}
$m2 = [regex]::Match($m[0],"param",[System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
if (-not $m2.Success) {return "No param block in $name"}
# elseif ($m[0] -inotmatch "(?s)^function\s*$name\s*{(\s*<\#.*?\#>|\s*\[.*?\])*\s*param")
# elseif ($reg2.IsMatch($m[0].Value)) {return "function $name has comment-based help"}
elseif ($m[0] -inotmatch "\[CmdletBinding\(" -and
$m[0] -inotmatch "\[parameter\(" ) {return "$name has is not an advanced function"}
#elseif (-not (& $Name -?).synopsis) {return "$name has no help"}
else {Write-Verbose "$name OK"}
}
}

80
CI/build.ps1 Normal file
View File

@@ -0,0 +1,80 @@
[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
# Path to install the module to, if not provided -Scope used.
[Parameter(Mandatory, ParameterSetName = 'ModulePath')]
[ValidateNotNullOrEmpty()]
[String]$ModulePath,
# Path to install the module to, PSModulePath "CurrentUser" or "AllUsers", if not provided "CurrentUser" used.
[Parameter(Mandatory, ParameterSetName = 'Scope')]
[ValidateSet('CurrentUser', 'AllUsers')]
[string]
$Scope = 'CurrentUser',
[switch]$Passthru
)
if ($PSScriptRoot) { Push-Location "$PSScriptRoot\.." }
$psdpath = Get-Item "*.psd1"
if (-not $psdpath -or $psdpath.count -gt 1) {
throw "Did not find a unique PSD file "
}
else {
$ModuleName = $psdpath.Name -replace '\.psd1$' , ''
$Settings = $(& ([scriptblock]::Create(($psdpath | Get-Content -Raw))))
}
try {
Write-Verbose -Message 'Module installation started'
if (!$ModulePath) {
if ($IsLinux -or $IsMacOS) {$ModulePathSeparator = ':' }
else {$ModulePathSeparator = ';' }
if ($Scope -eq 'CurrentUser') { $dir = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::UserProfile) }
else { $dir = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::ProgramFiles) }
$ModulePath = ($env:PSModulePath -split $ModulePathSeparator).where({$_ -like "$dir*"},"First",1)
$ModulePath = Join-Path -Path $ModulePath -ChildPath $ModuleName
$ModulePath = Join-Path -Path $ModulePath -ChildPath $Settings.ModuleVersion
}
# Create Directory
if (-not (Test-Path -Path $ModulePath)) {
$null = New-Item -Path $ModulePath -ItemType Directory -ErrorAction Stop
Write-Verbose -Message ('Created module folder: "{0}"' -f $ModulePath)
}
Write-Verbose -Message ('Copying files to "{0}"' -f $ModulePath)
$outputFile = $psdpath | Copy-Item -Destination $ModulePath -PassThru
Foreach ($file in $Settings.FileList) {
if ($file -like '.\*') {
$dest = ($file -replace '\.\\',"$ModulePath\")
if (-not (Test-Path -PathType Container (Split-Path -Parent $dest))) {
$null = New-item -Type Directory -Path (Split-Path -Parent $dest)
}
}
else {$dest = $ModulePath }
Copy-Item $file -Destination $dest -Force -Recurse
}
if (Test-Path -PathType Container "mdHelp") {
if (-not (Get-Module -ListAvailable platyPS)) {
Write-Verbose-Message ('Installing Platyps to build help files')
Install-Module -Name platyPS -Force -SkipPublisherCheck
}
Import-Module platyPS
Get-ChildItem .\mdHelp -Directory | ForEach-Object {
New-ExternalHelp -Path $_.FullName -OutputPath (Join-Path $ModulePath $_.Name) -Force -Verbose
}
}
$env:PSNewBuildModule = $ModulePath
if ($Passthru) {$outputFile}
}
catch {
throw ('Failed installing module "{0}". Error: "{1}" in Line {2}' -f $ModuleName, $_, $_.InvocationInfo.ScriptLineNumber)
}
finally {
if ($PSScriptRoot) { Pop-Location }
Write-Verbose -Message 'Module installation end'
}

75
CI/pipeline.yml Normal file
View File

@@ -0,0 +1,75 @@
# https://aka.ms/yaml
trigger:
branches:
include:
- '*'
# - master
# - releases/*
paths:
exclude:
- README.md
- CHANGELOG.md
jobs:
- job: 'Windows_PowerShell_all_options'
pool:
vmImage: 'windows-latest'
steps:
- powershell: 'Install-Module -Name Pester -Force -SkipPublisherCheck'
displayName: 'Update Pester'
- powershell: './CI/PS-CI.ps1 '
displayName: 'Check Build Check Pack Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)/ImportExcel'
artifact: 'ImportExcel'
- job: 'PowerShell_Core_on_Windows_Build_and_Pester_only'
pool:
vmImage: 'windows-latest'
steps:
- pwsh: 'Install-Module -Name Pester -Force'
displayName: 'Update Pester'
- pwsh: '.\CI\PS-CI.ps1 -SkipPreChecks -SkipHelp -SkipPostChecks'
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true
- job: 'Ubuntu_Build_and_Pester_Only'
pool:
vmImage: 'ubuntu-latest'
steps:
- powershell: 'Install-Module -Name Pester -Force'
displayName: 'Update Pester'
- powershell: './CI/PS-CI.ps1 -SkipPreChecks -SkipHelp -SkipPostChecks '
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true
- job: 'macOS_Build_and_Pester_Only'
pool:
vmImage: 'macOS-latest'
steps:
- script: brew install mono-libgdiplus
displayName: 'Install mono-libgdiplus'
- powershell: 'Install-Module -Name Pester -Force'
displayName: 'Update Pester'
- powershell: './CI/PS-CI.ps1 -SkipPreChecks -SkipHelp -SkipPostChecks'
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true

View File

@@ -9,7 +9,7 @@ function DoChart {
)
if($targetData[0] -is [System.ValueType]) {
$chart = New-ExcelChart -YRange "A1:A$($targetData.count)" -Title $title -ChartType $ChartType
$chart = New-ExcelChartDefinition -YRange "A1:A$($targetData.count)" -Title $title -ChartType $ChartType
} else {
$xyRange = Get-XYRange $targetData
@@ -19,7 +19,7 @@ function DoChart {
$Y = $xyRange.YRange.ExcelColumn
$YRange = "{0}2:{0}{1}" -f $Y,($targetData.count+1)
$chart = New-ExcelChart -XRange $xRange -YRange $yRange -Title $title -ChartType $ChartType `
$chart = New-ExcelChartDefinition -XRange $xRange -YRange $yRange -Title $title -ChartType $ChartType `
-NoLegend:$NoLegend -ShowCategory:$ShowCategory -ShowPercent:$ShowPercent
}

View File

@@ -1,34 +0,0 @@
Function ColorCompletion {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
[System.Drawing.KnownColor].GetFields() | Where-Object {$_.IsStatic -and $_.name -like "$wordToComplete*" } |
Sort-Object name | ForEach-Object {New-CompletionResult $_.name $_.name
}
}
if (Get-Command -Name register-argumentCompleter -ErrorAction SilentlyContinue) {
Register-ArgumentCompleter -CommandName Export-Excel -ParameterName TitleBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Add-ConditionalFormatting -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Add-ConditionalFormatting -ParameterName DataBarColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Add-ConditionalFormatting -ParameterName ForeGroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Compare-Worksheet -ParameterName AllDataBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Compare-Worksheet -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Compare-Worksheet -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Compare-Worksheet -ParameterName TabColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-Worksheet -ParameterName AddBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-Worksheet -ParameterName ChangeBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-Worksheet ` -ParameterName DeleteBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-MulipleSheets -ParameterName KeyFontColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-MulipleSheets -ParameterName AddBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-MulipleSheets -ParameterName ChangeBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-MulipleSheets ` -ParameterName DeleteBackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Merge-MulipleSheets -ParameterName KeyFontColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Format -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Format -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Format -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Column -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Column -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Column -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Row -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Row -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
Register-ArgumentCompleter -CommandName Set-Row -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
}

View File

@@ -1,74 +0,0 @@
Function Convert-XlRangeToImage {
<#
.Synopsis
Gets the specified part of an Excel file and exports it as an image
.Description
Excel allows charts to be exported directly to a file, but can't do this with the rest of a sheet. To work round this this function
* Opens a copy of Excel and loads a file
* Selects a worksheet and then a range of cells in that worksheet
* Copies the select to the clipboard
* Saves the clipboard contents as an image file (it will save as .JPG unless the file name ends .BMP or .PNG)
* Copies a single cell to the clipboard (to prevent the "you have put a lot in the clipboard" message appearing)
* Closes Excel
#>
Param (
#Path to the Excel file
[parameter(Mandatory=$true)]
$Path,
#Worksheet name - if none is specified "Sheet1" will be assumed
$workSheetname = "Sheet1" ,
#Range of cells within the sheet, e.g "A1:Z99"
[parameter(Mandatory=$true)]
$range,
#A bmp, png or jpg file where the result will be saved
$destination = "$pwd\temp.png",
#If specified opens the image in the default viewer.
[switch]$show
)
$extension = $destination -replace '^.*\.(\w+)$' ,'$1'
if ($extension -in @('JPEG','BMP','PNG')) {
$Format = [system.Drawing.Imaging.ImageFormat]$extension
} #if we don't recognise the extension OR if it is JPG with an E, use JPEG format
else { $Format = [system.Drawing.Imaging.ImageFormat]::Jpeg}
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Starting Excel"
$xlApp = New-Object -ComObject "Excel.Application"
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Opening Workbook and copying data"
$xlWbk = $xlApp.Workbooks.Open($Path)
$xlWbk.Worksheets($workSheetname).Select()
$xlWbk.ActiveSheet.Range($range).Select() | Out-Null
$xlApp.Selection.Copy() | Out-Null
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Saving copied data"
# Get-Clipboard came in with PS5. Older versions can use [System.Windows.Clipboard] but it is ugly.
$image = Get-Clipboard -Format Image
$image.Save($destination, $Format)
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Status "Closing Excel"
$xlWbk.ActiveSheet.Range("a1").Select() | Out-Null
$xlApp.Selection.Copy() | Out-Null
$xlApp.Quit()
Write-Progress -Activity "Exporting $range of $workSheetname in $Path" -Completed
if ($show) {Start-Process -FilePath $destination}
else {Get-Item -Path $destination}
}
<#
del demo*.xlsx
$workSheetname = 'Processes'
$Path = "$pwd\demo.xlsx"
$myData = Get-Process | Select-Object -Property Name,WS,CPU,Description,company,startTime
$excelPackage = $myData | Export-Excel -KillExcel -Path $Path -WorkSheetname $workSheetname -ClearSheet -AutoSize -AutoFilter -BoldTopRow -FreezeTopRow -PassThru
$workSheet = $excelPackage.Workbook.Worksheets[$workSheetname]
$range = $workSheet.Dimension.Address
Set-Format -WorkSheet $workSheet -Range "b:b" -NumberFormat "#,###" -AutoFit
Set-Format -WorkSheet $workSheet -Range "C:C" -NumberFormat "#,##0.00" -AutoFit
Set-Format -WorkSheet $workSheet -Range "F:F" -NumberFormat "dd MMMM HH:mm:ss" -AutoFit
Add-ConditionalFormatting -WorkSheet $workSheet -Range "c2:c1000" -DataBarColor Blue
Add-ConditionalFormatting -WorkSheet $workSheet -Range "b2:B1000" -RuleType GreaterThan -ConditionValue '104857600' -ForeGroundColor "Red" -Bold
Export-Excel -ExcelPackage $excelPackage -WorkSheetname $workSheetname
Convert-XlRangeToImage -Path $Path -workSheetname $workSheetname -range $range -destination "$pwd\temp.png" -show
#>
#Convert-XlRangeToImage -Path $Path -workSheetname $workSheetname -range $range -destination "$pwd\temp.png" -show

View File

@@ -1,50 +0,0 @@
function ConvertFrom-ExcelData {
<#
.SYNOPSIS
Reads data from a sheet, and for each row, calls a custom scriptblock with a list of property names and the row of data.
.EXAMPLE
ConvertFrom-ExcelData .\testSQLGen.xlsx {
param($propertyNames, $record)
$reportRecord = @()
foreach ($pn in $propertyNames) {
$reportRecord += "{0}: {1}" -f $pn, $record.$pn
}
$reportRecord +=""
$reportRecord -join "`r`n"
}
First: John
Last: Doe
The Zip: 12345
....
#>
param(
[Alias("FullName")]
[Parameter(ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Mandatory = $true)]
[ValidateScript( { Test-Path $_ -PathType Leaf })]
$Path,
[ScriptBlock]$scriptBlock,
[Alias("Sheet")]
$WorkSheetname = 1,
[int]$HeaderRow = 1,
[string[]]$Header,
[switch]$NoHeader,
[switch]$DataOnly
)
$null = $PSBoundParameters.Remove('scriptBlock')
$params = @{} + $PSBoundParameters
$data = Import-Excel @params
$PropertyNames = $data[0].psobject.Properties |
Where-Object {$_.membertype -match 'property'} |
Select-Object -ExpandProperty name
foreach ($record in $data) {
& $scriptBlock $PropertyNames $record
}
}

View File

@@ -1,130 +0,0 @@
function ConvertFrom-ExcelToSQLInsert {
<#
.SYNOPSIS
Generate SQL insert statements from Excel spreadsheet.
.DESCRIPTION
Generate SQL insert statements from Excel spreadsheet.
.PARAMETER TableName
Name of the target database table.
.PARAMETER Path
Path to an existing .XLSX file
This parameter is passed to Import-Excel as is.
.PARAMETER WorkSheetname
Specifies the name of the worksheet in the Excel workbook to import. By default, if no name is provided, the first worksheet will be imported.
This parameter is passed to Import-Excel as is.
.PARAMETER StartRow
The row from where we start to import data, all rows above the StartRow are disregarded. By default this is the first row.
When the parameters -NoHeader and -HeaderName are not provided, this row will contain the column headers that will be used as property names. When one of both parameters are provided, the property names are automatically created and this row will be treated as a regular row containing data.
.PARAMETER Header
Specifies custom property names to use, instead of the values defined in the column headers of the TopRow.
In case you provide less header names than there is data in the worksheet, then only the data with a corresponding header name will be imported and the data without header name will be disregarded.
In case you provide more header names than there is data in the worksheet, then all data will be imported and all objects will have all the property names you defined in the header names. As such, the last properties will be blanc as there is no data for them.
.PARAMETER NoHeader
Automatically generate property names (P1, P2, P3, ..) instead of the ones defined in the column headers of the TopRow.
This switch is best used when you want to import the complete worksheet as is and are not concerned with the property names.
.PARAMETER DataOnly
Import only rows and columns that contain data, empty rows and empty columns are not imported.
.PARAMETER ConvertEmptyStringsToNull
If specified, cells without any data are replaced with NULL, instead of an empty string.
This is to address behviors in certain DBMS where an empty string is insert as 0 for INT column, instead of a NULL value.
.EXAMPLE
Generate SQL insert statements from Movies.xlsx file, leaving blank cells as empty strings:
----------------------------------------------------------
| File: Movies.xlsx - Sheet: Sheet1 |
----------------------------------------------------------
| A B C |
|1 Movie Name Year Rating |
|2 The Bodyguard 1992 9 |
|3 The Matrix 1999 8 |
|4 Skyfall 2012 9 |
|5 The Avengers 2012 |
----------------------------------------------------------
PS C:\> Import-Excel -TableName "Movies" -Path 'C:\Movies.xlsx'
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('The Bodyguard', '1992', '9');
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('The Matrix', '1999', '8');
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('Skyfall', '2012', '9');
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('The Avengers', '2012', '');
.EXAMPLE
Generate SQL insert statements from Movies.xlsx file, specify NULL instead of an empty string.
----------------------------------------------------------
| File: Movies.xlsx - Sheet: Sheet1 |
----------------------------------------------------------
| A B C |
|1 Movie Name Year Rating |
|2 The Bodyguard 1992 9 |
|3 The Matrix 1999 8 |
|4 Skyfall 2012 9 |
|5 The Avengers 2012 |
----------------------------------------------------------
PS C:\> ConvertFrom-ExcelToSQLInsert -TableName "Movies" -Path "C:\Movies.xlsx" -ConvertEmptyStringsToNull
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('The Bodyguard', '1992', '9');
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('The Matrix', '1999', '8');
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('Skyfall', '2012', '9');
INSERT INTO Movies ('Movie Name', 'Year', 'Rating') Values('The Avengers', '2012', NULL);
.NOTES
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
$TableName,
[Alias("FullName")]
[Parameter(ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Mandatory = $true)]
[ValidateScript( { Test-Path $_ -PathType Leaf })]
$Path,
[Alias("Sheet")]
$WorkSheetname = 1,
[Alias('HeaderRow', 'TopRow')]
[ValidateRange(1, 9999)]
[Int]$StartRow,
[string[]]$Header,
[switch]$NoHeader,
[switch]$DataOnly,
[switch]$ConvertEmptyStringsToNull
)
$null = $PSBoundParameters.Remove('TableName')
$null = $PSBoundParameters.Remove('ConvertEmptyStringsToNull')
$params = @{} + $PSBoundParameters
ConvertFrom-ExcelData @params {
param($propertyNames, $record)
$ColumnNames = "'" + ($PropertyNames -join "', '") + "'"
$values = foreach ($propertyName in $PropertyNames) {
if ($ConvertEmptyStringsToNull.IsPresent -and [string]::IsNullOrEmpty($record.$propertyName)) {
'NULL'
}
else {
"'" + $record.$propertyName + "'"
}
}
$targetValues = ($values -join ", ")
"INSERT INTO {0} ({1}) Values({2});" -f $TableName, $ColumnNames, $targetValues
}
}

View File

@@ -1,34 +0,0 @@
Import-Module .\ImportExcel.psd1 -Force
$xlFile = ".\testSQL.xlsx"
Describe "ConvertFrom-ExcelToSQLInsert" {
BeforeEach {
$([PSCustomObject]@{
Name="John"
Age=$null
}) | Export-Excel $xlFile
}
AfterAll {
Remove-Item $xlFile -Recurse -Force -ErrorAction Ignore
}
It "Should be empty double single quotes" {
$expected="INSERT INTO Sheet1 ('Name', 'Age') Values('John', '');"
$actual = ConvertFrom-ExcelToSQLInsert -Path $xlFile Sheet1
$actual | should be $expected
}
It "Should have NULL" {
$expected="INSERT INTO Sheet1 ('Name', 'Age') Values('John', NULL);"
$actual = ConvertFrom-ExcelToSQLInsert -Path $xlFile Sheet1 -ConvertEmptyStringsToNull
$actual | should be $expected
}
}

View File

@@ -1,22 +0,0 @@
function Copy-ExcelWorkSheet {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$SourceWorkbook,
[Parameter(Mandatory=$true)]
$SourceWorkSheet,
[Parameter(Mandatory=$true)]
$DestinationWorkbook,
$DestinationWorkSheet,
[Switch]$Show
)
Write-Verbose "Copying $($SourceWorkSheet) from $($SourceWorkbook) to $($DestinationWorkSheet) in $($DestinationWorkbook)"
if(!$DestinationWorkSheet) {
$DestinationWorkSheet = $SourceWorkSheet
}
Import-Excel -Path $SourceWorkbook -WorkSheetname $SourceWorkSheet |
Export-Excel -Path $DestinationWorkbook -WorkSheetname $DestinationWorkSheet -Show:$Show
}

View File

@@ -1,7 +0,0 @@
$PSVersionTable.PSVersion
if ((Get-Module -ListAvailable pester) -eq $null) {
Install-Module -Name Pester -Repository PSGallery -Force
}
Invoke-Pester -Script $PSScriptRoot\__tests__

Binary file not shown.

View File

@@ -0,0 +1,15 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Put some simple data in a worksheet and Get an excel package object to represent the file
1..5 | Export-Excel $xlSourcefile -WorksheetName 'Tab1' -AutoSize -AutoFilter
#Add another tab. Replace the $TabData2 with your data
1..10 | Export-Excel $xlSourcefile -WorksheetName 'Tab 2' -AutoSize -AutoFilter
#Add another tab. Replace the $TabData3 with your data
1..15 | Export-Excel $xlSourcefile -WorksheetName 'Tab 3' -AutoSize -AutoFilter -Show

View File

@@ -0,0 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Put some simple data in a worksheet and Get an excel package object to represent the file
$excel = 1..10 | Export-Excel $xlSourcefile -PassThru
#Add a new worksheet named 'NewSheet' and copying the sheet that was just made (Sheet1) to the new sheet
Add-Worksheet -ExcelPackage $excel -WorkSheetname "NewSheet" -CopySource $excel.Workbook.Worksheets["Sheet1"]
#Save and open in Excel
Close-ExcelPackage -ExcelPackage $excel -Show

View File

@@ -0,0 +1,24 @@
# Creates a worksheet, addes a chart and then a Linear trendline
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @"
Region,Item,TotalSold
West,screws,60
South,lemon,48
South,apple,71
East,screwdriver,70
East,kiwi,32
West,screwdriver,1
South,melon,21
East,apple,79
South,apple,68
South,avocado,73
"@
$cd = New-ExcelChartDefinition -XRange Region -YRange TotalSold -ChartType ColumnClustered -ChartTrendLine Linear
$data | Export-Excel $xlSourcefile -ExcelChartDefinition $cd -AutoNameRange -Show

View File

@@ -1,12 +1,17 @@
rm temp.xlsx -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$data = invoke-sum (ps) company handles,pm,VirtualMemorySize
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$c = New-ExcelChart -Title Stats `
$data = Invoke-Sum -data (Get-Process) -dimension Company -measure Handles, PM, VirtualMemorySize
$c = New-ExcelChartDefinition -Title "ProcessStats" `
-ChartType LineMarkersStacked `
-Header "Stuff" `
-XRange "Processes[Company]" `
-YRange "Processes[PM]","Processes[VirtualMemorySize]"
$data |
Export-Excel temp.xlsx -AutoSize -TableName Processes -Show -ExcelChartDefinition $c
-XRange "Processes[Name]" `
-YRange "Processes[PM]","Processes[VirtualMemorySize]" `
-SeriesHeader "PM","VM"
$data |
Export-Excel -Path $xlSourcefile -AutoSize -TableName Processes -ExcelChartDefinition $c -Show

View File

@@ -1,16 +1,22 @@
rm temp.xlsx -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = @"
A,B,C,Date
2,1,1,2016-03-29
5,10,1,2016-03-29
"@ | ConvertFrom-Csv
"@
$c = New-ExcelChart -Title Impressions `
-ChartType Line -Header "Something" `
$c = New-ExcelChartDefinition -Title Impressions `
-ChartType Line `
-XRange "Impressions[Date]" `
-YRange @("Impressions[B]","Impressions[A]") `
-SeriesHeader 'B data','A data'
-SeriesHeader 'B data','A data' `
-Row 0 -Column 0
$data |
Export-Excel temp.xlsx -AutoSize -TableName Impressions -Show -ExcelChartDefinition $c
$data | ConvertFrom-Csv | Export-Excel -path $xlSourcefile -AutoSize -TableName Impressions
Export-Excel -path $xlSourcefile -worksheetName chartPage -ExcelChartDefinition $c -show

View File

@@ -1,19 +1,22 @@
rm *.xlsx
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = @"
ID,Product,Quantity,Price,Total
12001,Nails,37,3.99,147.63
12002,Hammer,5,12.10,60.5
12003,Saw,12,15.37,184.44
12010,Drill,20,8,160
12010,Drill,20,8,160
12011,Crowbar,7,23.48,164.36
"@ | ConvertFrom-Csv
"@
$xRange = "Product"
$c1 = New-ExcelChartDefinition -YRange "Price" -XRange "Product" -Title "Item price" -NoLegend -Height 225
$c2 = New-ExcelChartDefinition -YRange "Total "-XRange "Product" -Title "Total sales" -NoLegend -Height 225 -Row 9 -Column 15
$c3 = New-ExcelChartDefinition -YRange "Quantity"-XRange "Product" -Title "Sales volume" -NoLegend -Height 225 -Row 15
$yRange="Price"; $c1 = New-ExcelChart -YRange $yRange -XRange $xRange -Title $yRange -Height 225
$yRange="Total"; $c2 = New-ExcelChart -YRange $yRange -XRange $xRange -Title $yRange -Row 9 -Column 15 -Height 225
$yRange="Quantity"; $c3 = New-ExcelChart -YRange $yRange -XRange $xRange -Title $yRange -Row 15 -Height 225
$data |
Export-Excel -ExcelChartDefinition $c1,$c2,$c3 Tools.xlsx -Show -AutoFilter -AutoNameRange -AutoSize
$data | ConvertFrom-Csv |
Export-Excel -Path $xlSourcefile -AutoFilter -AutoNameRange -AutoSize -ExcelChartDefinition $c1,$c2,$c3 -Show

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -0,0 +1,31 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @"
Week, TotalVisitors
1,11916
2,11665
3,13901
4,15444
5,21592
6,15057
7,26187
8,20662
9,28935
10,32443
"@
$cd = New-ExcelChartDefinition `
-XRange Week `
-YRange TotalVisitors `
-Title "No. Of Visitors" `
-ChartType ColumnClustered `
-NoLegend `
-ChartTrendLine Linear
$data | Export-Excel $xlSourcefile -Show -AutoNameRange -AutoSize -TableName Visitors -ExcelChartDefinition $cd

Binary file not shown.

View File

@@ -1,3 +1,5 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
function plot {
param(
$f,
@@ -7,20 +9,22 @@ function plot {
$minx=[math]::Round($minx,1)
$maxx=[math]::Round($maxx,1)
$file = 'C:\temp\plot.xlsx'
rm $file -ErrorAction Ignore
$c = New-ExcelChart -XRange X -YRange Y -ChartType Line -NoLegend -Title Plot -Column 2 -ColumnOffSetPixels 35
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
# $c = New-ExcelChart -XRange X -YRange Y -ChartType Line -NoLegend -Title Plot -Column 2 -ColumnOffSetPixels 35
$(for ($i = $minx; $i -lt $maxx-.1; $i+=.1) {
[pscustomobject]@{
X=$i.ToString("N1")
Y=(&$f $i)
}
}) | Export-Excel $file -Show -AutoNameRange -ExcelChartDefinition $c
}) | Export-Excel $xlSourcefile -Show -AutoNameRange -LineChart -NoLegend #-ExcelChartDefinition $c
}
function pi {[math]::pi}
plot {[math]::Tan($args[0])} (pi) (3*(pi)/2-.01)
plot -f {[math]::Tan($args[0])} -minx (pi) -maxx (3*(pi)/2-.01)

View File

@@ -0,0 +1,27 @@
<#
To see this written up with example screenshots, head over to the IT Splat blog
URL: http://bit.ly/2SxieeM
#>
## Create an Excel file with multiple worksheets
# Get a list of processes on the system
$processes = Get-Process | Sort-Object -Property ProcessName | Group-Object -Property ProcessName | Where-Object {$_.Count -gt 2}
# Export the processes to Excel, each process on its own sheet
$processes | ForEach-Object { $_.Group | Export-Excel -Path MultiSheetExample.xlsx -WorksheetName $_.Name -AutoSize -AutoFilter }
# Show the completed file
Invoke-Item .\MultiSheetExample.xlsx
## Add an additional sheet to the new workbook
# Use Open-ExcelPackage to open the workbook
$excelPackage = Open-ExcelPackage -Path .\MultiSheetExample.xlsx
# Create a new worksheet and give it a name, set MoveToStart to make it the first sheet
$ws = Add-Worksheet -ExcelPackage $excelPackage -WorksheetName 'All Services' -MoveToStart
# Get all the running services on the system
Get-Service | Export-Excel -ExcelPackage $excelPackage -WorksheetName $ws -AutoSize -AutoFilter
# Close the package and show the final result
Close-ExcelPackage -ExcelPackage $excelPackage -Show

View File

@@ -1,9 +1,9 @@
echo Last7Days LastMonth LastWeek NextMonth NextWeek ThisMonth ThisWeek Today Tomorrow Yesterday |
% {
"Last7Days", "LastMonth", "LastWeek", "NextMonth", "NextWeek", "ThisMonth", "ThisWeek", "Today", "Tomorrow", "Yesterday" |
Foreach-Object {
$text = @"
`$f = ".\testExport.xlsx"
rm `$f -ErrorAction Ignore
remove-item `$f -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel `$f -Show -AutoSize -ConditionalText `$(

View File

@@ -1,11 +1,15 @@
$file = ".\conditionalTextFormatting.xlsx"
rm $file -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Get-Service |
Select Status, Name, DisplayName, ServiceName |
Export-Excel $file -Show -AutoSize -AutoFilter -ConditionalText $(
New-ConditionalText stop
New-ConditionalText runn darkblue cyan
New-ConditionalText -ConditionalType EndsWith svc wheat green
New-ConditionalText -ConditionalType BeginsWith windows darkgreen wheat
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Get-Service |
Select-Object Status, Name, DisplayName, ServiceName |
Export-Excel $xlSourcefile -Show -AutoSize -AutoFilter -ConditionalText $(
New-ConditionalText stop #Stop is the condition value, the rule is defaults to 'Contains text' and the default Colors are used
New-ConditionalText runn darkblue cyan #runn is the condition value, the rule is defaults to 'Contains text'; the foregroundColur is darkblue and the background is cyan
New-ConditionalText -ConditionalType EndsWith svc wheat green #the rule here is 'Ends with' and the value is 'svc' the forground is wheat and the background dark green
New-ConditionalText -ConditionalType BeginsWith windows darkgreen wheat #this is 'Begins with "Windows"' the forground is dark green and the background wheat
)

View File

@@ -1,15 +1,21 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Define a "Contains blanks" rule. No format is specified so it default to dark-red text on light-pink background.
$ContainsBlanks = New-ConditionalText -ConditionalType ContainsBlanks
$data = $(
New-PSItem a b c (echo p1 p2 p3)
New-PSItem
New-PSItem a b c @('p1', 'p2', 'p3')
New-PSItem
New-PSItem d e f
New-PSItem
New-PSItem
New-PSItem g h i
New-PSItem
New-PSItem
New-PSItem g h i
)
$file ="c:\temp\testblanks.xlsx"
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
rm $file -ErrorAction Ignore
$data | Export-Excel $file -show -ConditionalText $ContainsBlanks
#use the conditional format definition created above
$data | Export-Excel $xlSourcefile -show -ConditionalText $ContainsBlanks

View File

@@ -1,21 +1,34 @@
Remove-Item -Path .\test.xlsx -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Export processes, and get an ExcelPackage object representing the file.
$excel = Get-Process |
Select-Object -Property Name,Company,Handles,CPU,PM,NPM,WS |
Export-Excel -Path .\test.xlsx -ClearSheet -WorkSheetname "Processes" -PassThru
Export-Excel -Path $xlSourcefile -ClearSheet -WorkSheetname "Processes" -PassThru
$sheet = $excel.Workbook.Worksheets["Processes"]
$sheet.Column(1) | Set-Format -Bold -AutoFit
$sheet.Column(2) | Set-Format -Width 29 -WrapText
$sheet.Column(3) | Set-Format -HorizontalAlignment Right -NFormat "#,###"
Set-Format -Address $sheet.Cells["E1:H1048576"] -HorizontalAlignment Right -NFormat "#,###"
Set-Format -Address $sheet.Column(4) -HorizontalAlignment Right -NFormat "#,##0.0" -Bold
Set-Format -Address $sheet.Row(1) -Bold -HorizontalAlignment Center
#Apply fixed formatting to columns. -NFormat is an alias for numberformat
$sheet.Column(1) | Set-ExcelRange -Bold -AutoFit
$sheet.Column(2) | Set-ExcelRange -Width 29 -WrapText
$sheet.Column(3) | Set-ExcelRange -HorizontalAlignment Right -NFormat "#,###"
Add-ConditionalFormatting -WorkSheet $sheet -Range "D2:D1048576" -DataBarColor Red
Add-ConditionalFormatting -WorkSheet $sheet -Range "G2:G1048576" -RuleType GreaterThan -ConditionValue "104857600" -ForeGroundColor Red
Set-ExcelRange -Range $sheet.Cells["E1:H1048576"] -HorizontalAlignment Right -NFormat "#,###"
foreach ($c in 5..9) {Set-Format -Address $sheet.Column($c) -AutoFit }
Set-ExcelRange -Range $sheet.Column(4) -HorizontalAlignment Right -NFormat "#,##0.0" -Bold
#In Set-ExcelRange "-Address" is an alias for "-Range"
Set-ExcelRange -Address $sheet.Row(1) -Bold -HorizontalAlignment Center
#Create a Red Data-bar for the values in Column D
Add-ConditionalFormatting -Worksheet $sheet -Address "D2:D1048576" -DataBarColor Red
# Conditional formatting applies to "Addreses" aliases allow either "Range" or "Address" to be used in Set-ExcelRange or Add-Conditional formatting.
Add-ConditionalFormatting -Worksheet $sheet -Range "G2:G1048576" -RuleType GreaterThan -ConditionValue "104857600" -ForeGroundColor Red
foreach ($c in 5..9) {Set-ExcelRange -Address $sheet.Column($c) -AutoFit }
#Create a pivot and save the file.
Export-Excel -ExcelPackage $excel -WorkSheetname "Processes" -IncludePivotChart -ChartType ColumnClustered -NoLegend -PivotRows company -PivotData @{'Name'='Count'} -Show

View File

@@ -1,11 +1,14 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = $(
New-PSItem North 111 (echo Region Amount )
New-PSItem East 111
New-PSItem North 111 @( 'Region', 'Amount' )
New-PSItem East 111
New-PSItem West 122
New-PSItem South 200
@@ -14,13 +17,15 @@ $data = $(
New-PSItem SouthWest 136
New-PSItem South 127
New-PSItem NorthByNory 100
New-PSItem NothEast 110
New-PSItem Westerly 120
New-PSItem NorthByNory 100
New-PSItem NothEast 110
New-PSItem Westerly 120
New-PSItem SouthWest 118
)
)
# in this example instead of doing $variable = New-Conditional text <parameters> .... ; Export-excel -ConditionalText $variable <other parameters>
# the syntax is used is Export-excel -ConditionalText (New-Conditional text <parameters>) <other parameters>
#$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType AboveAverage)
$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType BelowAverage)
#$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType TopPercent)
#$data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType AboveAverage)
$data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType BelowAverage)
#$data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType TopPercent)

View File

@@ -1,6 +1,8 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
function Get-DateOffset {
param($days=0)
(Get-Date).AddDays($days).ToShortDateString()
}
@@ -8,7 +10,7 @@ function Get-Number {
Get-Random -Minimum 10 -Maximum 100
}
New-PSItem (Get-DateOffset -7) (Get-Number) 'LastWeek,Last7Days,ThisMonth' (echo Date Amount Label)
New-PSItem (Get-DateOffset -7) (Get-Number) 'LastWeek,Last7Days,ThisMonth' @('Date', 'Amount', 'Label')
New-PSItem (Get-DateOffset) (Get-Number) 'Today,ThisMonth,ThisWeek'
New-PSItem (Get-DateOffset -30) (Get-Number) LastMonth
New-PSItem (Get-DateOffset -1) (Get-Number) 'Yesterday,ThisMonth,ThisWeek'

View File

@@ -1,8 +1,15 @@
rm .\testExport.xlsx -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
ps | where Company | select Company, Name, PM, Handles, *mem* |
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Export-Excel .\testExport.xlsx -Show -AutoSize -AutoNameRange `
Get-Process | Where-Object Company | Select-Object Company, Name, PM, Handles, *mem* |
#This example creates a 3 Icon set for the values in the "PM column, and Highlights company names (anywhere in the data) with different colors
Export-Excel -Path $xlSourcefile -Show -AutoSize -AutoNameRange `
-ConditionalFormat $(
New-ConditionalFormattingIconSet -Range "C:C" `
-ConditionalFormat ThreeIconSet -IconType Arrows

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Last7Days
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType LastMonth
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType LastWeek
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType NextMonth
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType NextWeek
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType ThisMonth
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType ThisWeek
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Today
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Tomorrow
)

View File

@@ -1,8 +1,11 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
.\GenDates.ps1 |
Export-Excel $f -Show -AutoSize -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText $(
New-ConditionalText -ConditionalType Yesterday
)

View File

@@ -1,23 +1,26 @@
$f = ".\testExport.xlsx"
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
rm $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = $(
New-PSItem North 111 (echo Region Amount )
New-PSItem East 11
New-PSItem West 12
New-PSItem South 1000
New-PSItem North 111 @('Region', 'Amount' )
New-PSItem East 11
New-PSItem West 12
New-PSItem South 1000
New-PSItem NorthEast 10
New-PSItem SouthEast 14
New-PSItem SouthWest 13
New-PSItem South 12
New-PSItem NorthEast 10
New-PSItem SouthEast 14
New-PSItem SouthWest 13
New-PSItem South 12
New-PSItem NorthByNory 100
New-PSItem NothEast 110
New-PSItem Westerly 120
New-PSItem SouthWest 11
)
New-PSItem NorthByNory 100
New-PSItem NothEast 110
New-PSItem Westerly 120
New-PSItem SouthWest 11
)
$data | Export-Excel $f -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType DuplicateValues)
$data | Export-Excel $xlSourcefile -Show -AutoSize -ConditionalText (New-ConditionalText -ConditionalType DuplicateValues)

View File

@@ -0,0 +1,28 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$excel = @"
Month,New York City,Austin Texas,Portland Oregon
Jan,39,61,46
Feb,42,65,51
Mar,50,73,56
Apr,62,80,61
May,72,86,67
Jun,80,92,73
Jul,85,95,80
Aug,84,96,80
Sep,76,90,75
Oct,65,82,63
Nov,54,71,52
Dec,44,63,46
"@ | ConvertFrom-csv |
Export-Excel -Path $xlSourcefile -WorkSheetname Sheet1 -AutoNameRange -AutoSize -Title "Monthly Temperatures" -PassThru
$sheet = $excel.Workbook.Worksheets["Sheet1"]
Add-ConditionalFormatting -Worksheet $sheet -Range "B1:D14" -DataBarColor CornflowerBlue
Close-ExcelPackage $excel -Show

View File

@@ -1,18 +1,21 @@
ipmo ImportExcel -Force
$f = ".\testExport.xlsx"
rm $f -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
function Get-DateOffset ($days=0) {
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
function Get-DateOffset ($days=0) {
(Get-Date).AddDays($days).ToShortDateString()
}
$(
New-PSItem (Get-DateOffset -1) (Get-DateOffset 1) (echo Start End)
New-PSItem (Get-DateOffset) (Get-DateOffset 7)
New-PSItem (Get-DateOffset -10) (Get-DateOffset -1)
) |
New-PSItem (Get-DateOffset -1) (Get-DateOffset 1) @("Start", "End")
New-PSItem (Get-DateOffset) (Get-DateOffset 7)
New-PSItem (Get-DateOffset -10) (Get-DateOffset -1)
) |
Export-Excel $f -Show -AutoSize -AutoNameRange -ConditionalText $(
Export-Excel $xlSourcefile -Show -AutoSize -AutoNameRange -ConditionalText $(
New-ConditionalText -Range Start -ConditionalType Yesterday -ConditionalTextColor Red
New-ConditionalText -Range End -ConditionalType Yesterday -BackgroundColor Blue -ConditionalTextColor Red
)

View File

@@ -0,0 +1,25 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$excel = @"
Month,Sales
Jan,1277
Feb,1003
Mar,1105
Apr,952
May,770
Jun,621
"@ | ConvertFrom-csv |
Export-Excel -Path $xlSourcefile -WorkSheetname Sheet1 -AutoNameRange -PassThru
$sheet = $excel.Workbook.Worksheets["Sheet1"]
Add-ConditionalFormatting -Worksheet $sheet -Range "B1:B7" -DataBarColor LawnGreen
Set-ExcelRange -Address $sheet.Cells["A8"] -Value "Total"
Set-ExcelRange -Address $sheet.Cells["B8"] -Formula "=Sum(Sales)"
Close-ExcelPackage $excel -Show

View File

@@ -1,27 +1,29 @@
cls
try {Import-Module ..\..\ImportExcel.psd1 -Force} catch {throw ; return}
ipmo ..\..\ImportExcel.psd1 -Force
$data = $(
New-PSItem 100 @('test', 'testx')
New-PSItem 200
New-PSItem 300
New-PSItem 400
New-PSItem 500
)
$data = $(
New-PSItem 100 (echo test testx)
New-PSItem 200
New-PSItem 300
New-PSItem 400
New-PSItem 500
)
#Get rid of pre-exisiting sheet
$xlSourcefile1 = "$env:TEMP\ImportExcelExample1.xlsx"
$xlSourcefile2 = "$env:TEMP\ImportExcelExample2.xlsx"
$file1 = "tryComparison1.xlsx"
$file2 = "tryComparison2.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile1"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile2"
rm $file1 -ErrorAction Ignore
rm $file2 -ErrorAction Ignore
Remove-Item $xlSourcefile1 -ErrorAction Ignore
Remove-Item $xlSourcefile2 -ErrorAction Ignore
$data | Export-Excel $file1 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThan 300
New-ConditionalText -ConditionalType LessThan 300 -BackgroundColor cyan
)
$data | Export-Excel $xlSourcefile1 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThan 300
New-ConditionalText -ConditionalType LessThan 300 -BackgroundColor cyan
)
$data | Export-Excel $file2 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThanOrEqual 275
New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan
)
$data | Export-Excel $xlSourcefile2 -Show -ConditionalText $(
New-ConditionalText -ConditionalType GreaterThanOrEqual 275
New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan
)

View File

@@ -0,0 +1,37 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-csv @"
Store,January,February,March,April,May,June
store27,99511,64582,45216,48690,64921,54066
store82,22275,23708,28223,26699,41388,31648
store41,24683,22583,97947,31999,39092,41201
store16,16568,48040,68589,20394,63202,26197
store21,99353,23470,28398,21788,94101,88608
store86,66662,83321,27489,92627,54084,24278
store07,92692,53300,29284,39643,33556,53885
store58,68875,83705,66635,81025,30207,75570
store01,21292,82341,81339,12505,29516,41634
store82,74047,93325,25002,40113,76278,45707
"@
Export-Excel -InputObject $data -Path $xlSourcefile -TableName RawData -WorksheetName RawData
Export-Excel -InputObject $data -Path $xlSourcefile -TableName TopData -WorksheetName StoresTop10Sales
Export-Excel -InputObject $data -Path $xlSourcefile -TableName Databar -WorksheetName StoresSalesDataBar
Export-Excel -InputObject $data -Path $xlSourcefile -TableName TwoColorScale -WorksheetName StoresSalesTwoColorScale
$xl = Open-ExcelPackage -Path $xlSourcefile
Set-ExcelRange -Worksheet $xl.StoresTop10Sales -Range $xl.StoresTop10Sales.dimension.address -NumberFormat 'Currency' -AutoSize
Set-ExcelRange -Worksheet $xl.StoresSalesDataBar -Range $xl.StoresSalesDataBar.dimension.address -NumberFormat 'Currency' -AutoSize
Set-ExcelRange -Worksheet $xl.StoresSalesTwoColorScale -Range $xl.StoresSalesDataBar.dimension.address -NumberFormat 'Currency' -AutoSize
Add-ConditionalFormatting -Worksheet $xl.StoresTop10Sales -Address $xl.StoresTop10Sales.dimension.address -RuleType Top -ForegroundColor white -BackgroundColor green -ConditionValue 10
Add-ConditionalFormatting -Worksheet $xl.StoresSalesDataBar -Address $xl.StoresSalesDataBar.dimension.address -DataBarColor Red
Add-ConditionalFormatting -Worksheet $xl.StoresSalesTwoColorScale -Address $xl.StoresSalesDataBar.dimension.address -RuleType TwoColorScale
Close-ExcelPackage $xl -Show

View File

@@ -1,3 +1,4 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
ConvertFrom-ExcelToSQLInsert People .\testSQLGen.xlsx

View File

@@ -1,7 +1,9 @@
Import-Module ..\..\ImportExcel.psd1 -Force
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$f = ".\dashboard.xlsx"
Remove-Item $f -ErrorAction Ignore
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = @"
From,To,RDollars,RPercent,MDollars,MPercent,Revenue,Margin
@@ -13,60 +15,60 @@ New York,San Francisco,3221000,.0629,1088000,.04,436,21
New York,Phoneix,2782000,.0723,467000,.10,674,33
"@ | ConvertFrom-Csv
$data | Export-Excel $f -AutoSize
$data | Export-Excel $xlSourcefile -AutoSize
$excel = Open-ExcelPackage $f
$excel = Open-ExcelPackage $xlSourcefile
$sheet1 = $excel.Workbook.Worksheets["sheet1"]
$sheet1.View.ShowGridLines = $false
$sheet1.View.ShowHeaders = $false
Set-Format -Address $sheet1.Cells["C:C"] -NumberFormat "$#,##0" -WrapText -HorizontalAlignment Center
Set-Format -Address $sheet1.Cells["D:D"] -NumberFormat "#.#0%" -WrapText -HorizontalAlignment Center
Set-ExcelRange -Address $sheet1.Cells["C:C"] -NumberFormat "$#,##0" -WrapText -HorizontalAlignment Center
Set-ExcelRange -Address $sheet1.Cells["D:D"] -NumberFormat "#.#0%" -WrapText -HorizontalAlignment Center
Set-Format -Address $sheet1.Cells["E:E"] -NumberFormat "$#,##0" -WrapText -HorizontalAlignment Center
Set-Format -Address $sheet1.Cells["F:F"] -NumberFormat "#.#0%" -WrapText -HorizontalAlignment Center
Set-ExcelRange -Address $sheet1.Cells["E:E"] -NumberFormat "$#,##0" -WrapText -HorizontalAlignment Center
Set-ExcelRange -Address $sheet1.Cells["F:F"] -NumberFormat "#.#0%" -WrapText -HorizontalAlignment Center
Set-Format -Address $sheet1.Cells["G:H"] -WrapText -HorizontalAlignment Center
Set-ExcelRange -Address $sheet1.Cells["G:H"] -WrapText -HorizontalAlignment Center
## Insert Rows/Columns
$sheet1.InsertRow(1, 1)
foreach ($col in Write-Output 2 4 6 8 10 12 14) {
foreach ($col in @(2, 4, 6, 8, 10, 12, 14)) {
$sheet1.InsertColumn($col, 1)
$sheet1.Column($col).width = .75
}
Set-Format -Address $sheet1.Cells["E:E"] -Width 12
Set-Format -Address $sheet1.Cells["I:I"] -Width 12
Set-ExcelRange -Address $sheet1.Cells["E:E"] -Width 12
Set-ExcelRange -Address $sheet1.Cells["I:I"] -Width 12
$BorderBottom = "Thick"
$BorderColor = "Black"
Set-Format -Address $sheet1.Cells["A2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-ExcelRange -Address $sheet1.Cells["A2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-Format -Address $sheet1.Cells["C2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-Format -Address $sheet1.Cells["E2:G2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-Format -Address $sheet1.Cells["I2:K2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-Format -Address $sheet1.Cells["M2:O2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-ExcelRange -Address $sheet1.Cells["C2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-ExcelRange -Address $sheet1.Cells["E2:G2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-ExcelRange -Address $sheet1.Cells["I2:K2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-ExcelRange -Address $sheet1.Cells["M2:O2"] -BorderBottom $BorderBottom -BorderColor $BorderColor
Set-Format -Address $sheet1.Cells["A2:C8"] -FontColor GrayText
Set-ExcelRange -Address $sheet1.Cells["A2:C8"] -FontColor Gray
$HorizontalAlignment = "Center"
Set-Format -Address $sheet1.Cells["F1"] -HorizontalAlignment $HorizontalAlignment -Bold -Value Revenue
Set-Format -Address $sheet1.Cells["J1"] -HorizontalAlignment $HorizontalAlignment -Bold -Value Margin
Set-Format -Address $sheet1.Cells["N1"] -HorizontalAlignment $HorizontalAlignment -Bold -Value Passenger
Set-ExcelRange -Address $sheet1.Cells["F1"] -HorizontalAlignment $HorizontalAlignment -Bold -Value Revenue
Set-ExcelRange -Address $sheet1.Cells["J1"] -HorizontalAlignment $HorizontalAlignment -Bold -Value Margin
Set-ExcelRange -Address $sheet1.Cells["N1"] -HorizontalAlignment $HorizontalAlignment -Bold -Value Passenger
Set-Format -Address $sheet1.Cells["E2"] -Value '($)'
Set-Format -Address $sheet1.Cells["G2"] -Value '%'
Set-Format -Address $sheet1.Cells["I2"] -Value '($)'
Set-Format -Address $sheet1.Cells["K2"] -Value '%'
Set-ExcelRange -Address $sheet1.Cells["E2"] -Value '($)'
Set-ExcelRange -Address $sheet1.Cells["G2"] -Value '%'
Set-ExcelRange -Address $sheet1.Cells["I2"] -Value '($)'
Set-ExcelRange -Address $sheet1.Cells["K2"] -Value '%'
Set-Format -Address $sheet1.Cells["C10"] -HorizontalAlignment Right -Bold -Value "Grand Total Calculation"
Set-Format -Address $sheet1.Cells["E10"] -Formula "=Sum(E3:E8)" -Bold
Set-Format -Address $sheet1.Cells["I10"] -Formula "=Sum(I3:I8)" -Bold
Set-Format -Address $sheet1.Cells["M10"] -Formula "=Sum(M3:M8)" -Bold
Set-Format -Address $sheet1.Cells["O10"] -Formula "=Sum(O3:O8)" -Bold
Set-ExcelRange -Address $sheet1.Cells["C10"] -HorizontalAlignment Right -Bold -Value "Grand Total Calculation"
Set-ExcelRange -Address $sheet1.Cells["E10"] -Formula "=Sum(E3:E8)" -Bold
Set-ExcelRange -Address $sheet1.Cells["I10"] -Formula "=Sum(I3:I8)" -Bold
Set-ExcelRange -Address $sheet1.Cells["M10"] -Formula "=Sum(M3:M8)" -Bold
Set-ExcelRange -Address $sheet1.Cells["O10"] -Formula "=Sum(O3:O8)" -Bold
Close-ExcelPackage $excel -Show
Close-ExcelPackage $excel -Show

View File

@@ -0,0 +1,89 @@
<#
This is an example on how to customize Export-Excel to your liking.
First select a name for your function, in ths example its "Out-Excel" you can even set the name to "Export-Excel".
You can customize the following things:
1. To add parameters to the function define them in "param()", here I added "Preset1" and "Preset2".
The parameters need to be removed after use (see comments and code below).
2. To remove parameters from the function add them to the list under "$_.Name -notmatch", I removed "Now".
3. Add your custom code, here I defined what the Presets do:
Preset1 configure the TableStyle, name the table depending on WorksheetName and FreezeTopRow.
Preset2 will set AutoFilter and add the Title "Daily Report".
(see comments and code below).
#>
function Out-Excel {
[CmdletBinding(DefaultParameterSetName = 'Default')]
param(
[switch]
${Preset1},
[switch]
${Preset2}
)
DynamicParam {
$paramDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()
foreach ($P in (Get-Command -Name Export-Excel).Parameters.values.where( { $_.Name -notmatch 'Verbose|Debug|Action$|Variable$|Buffer$|Now' })) {
$paramDictionary.Add($P.Name, [System.Management.Automation.RuntimeDefinedParameter]::new( $P.Name, $P.ParameterType, $P.Attributes ) )
}
return $paramDictionary
}
begin {
try {
# Run you custom code here if it need to run before calling Export-Excel.
$PSBoundParameters['Now'] = $true
if ($Preset1) {
$PSBoundParameters['TableStyle'] = 'Medium7'
$PSBoundParameters['FreezeTopRow'] = $true
if ($PSBoundParameters['WorksheetName'] -and -not $PSBoundParameters['TableName']) {
$PSBoundParameters['TableName'] = $PSBoundParameters['WorksheetName'] + '_Table'
}
}
elseif ($Preset2) {
$PSBoundParameters['Title'] = 'Daily Report'
$PSBoundParameters['AutoFilter'] = $true
}
# Remove the extra params we added as Export-Excel will not know what to do with them:
$null = $PSBoundParameters.Remove('Preset1')
$null = $PSBoundParameters.Remove('Preset2')
# The rest of the code was auto generated.
$outBuffer = $null
if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
$PSBoundParameters['OutBuffer'] = 1
}
$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Export-Excel', [System.Management.Automation.CommandTypes]::Function)
# You can add a pipe after @PSBoundParameters to manipulate the output.
$scriptCmd = { & $wrappedCmd @PSBoundParameters }
$steppablePipeline = $scriptCmd.GetSteppablePipeline()
$steppablePipeline.Begin($PSCmdlet)
}
catch {
throw
}
}
process {
try {
$steppablePipeline.Process($_)
}
catch {
throw
}
}
end {
try {
$steppablePipeline.End()
}
catch {
throw
}
}
<#
.ForwardHelpTargetName Export-Excel
.ForwardHelpCategory Function
#>
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,34 @@
# DSUM
# Adds the numbers in a field (column) of records in a list or database that match conditions that you specify.
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @"
Color,Date,Sales
Red,1/15/2018,250
Blue,1/15/2018,200
Red,1/16/2018,175
Blue,1/16/2018,325
Red,1/17/2018,150
Blue,1/17/2018,300
"@
$xl = Export-Excel -InputObject $data -Path $xlSourcefile -AutoSize -AutoFilter -TableName SalesInfo -AutoNameRange -PassThru
$databaseAddress = $xl.Sheet1.Dimension.Address
Set-Format -Worksheet $xl.Sheet1 -Range C:C -NumberFormat '$##0'
Set-Format -Worksheet $xl.Sheet1 -Range E1 -Value Color
Set-Format -Worksheet $xl.Sheet1 -Range F1 -Value Date
Set-Format -Worksheet $xl.Sheet1 -Range G1 -Value Sales
Set-Format -Worksheet $xl.Sheet1 -Range E2 -Value Red
Set-Format -Worksheet $xl.Sheet1 -Range E4 -Value Sales
Set-Format -Worksheet $xl.Sheet1 -Range F4 -Formula ('=DSUM({0},"Sales",E1:G2)' -f $databaseAddress) -NumberFormat '$##0'
Close-ExcelPackage $xl -Show

View File

@@ -0,0 +1,23 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @"
Fruit,Amount
Apples,50
Oranges,20
Bananas,60
Lemons,40
"@
$xl = Export-Excel -InputObject $data -Path $xlSourcefile -PassThru -AutoSize
Set-ExcelRange -Worksheet $xl.Sheet1 -Range D2 -BackgroundColor LightBlue -Value Apples
$rows = $xl.Sheet1.Dimension.Rows
Set-ExcelRange -Worksheet $xl.Sheet1 -Range E2 -Formula "=VLookup(D2,A2:B$($rows),2,FALSE)"
Close-ExcelPackage $xl -Show

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,87 @@
#region Setup
<#
This examples demos three types of validation:
* Creating a list using a PowerShell array
* Creating a list data from another Excel Worksheet
* Creating a rule for numbers to be between 0 an 10000
Run the script then try"
* Add random data in Column B
* Then choose from the drop down list
* Add random data in Column C
* Then choose from the drop down list
* Add .01 in column F
#>
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv -InputObject @"
ID,Region,Product,Quantity,Price
12001,North,Nails,37,3.99
12002,South,Hammer,5,12.10
12003,East,Saw,12,15.37
12010,West,Drill,20,8
12011,North,Crowbar,7,23.48
"@
# Export the raw data
$excelPackage = $Data |
Export-Excel -WorksheetName "Sales" -Path $xlSourcefile -PassThru
# Creates a sheet with data that will be used in a validation rule
$excelPackage = @('Chisel', 'Crowbar', 'Drill', 'Hammer', 'Nails', 'Saw', 'Screwdriver', 'Wrench') |
Export-excel -ExcelPackage $excelPackage -WorksheetName Values -PassThru
#endregion
#region Creating a list using a PowerShell array
$ValidationParams = @{
Worksheet = $excelPackage.sales
ShowErrorMessage = $true
ErrorStyle = 'stop'
ErrorTitle = 'Invalid Data'
}
$MoreValidationParams = @{
Range = 'B2:B1001'
ValidationType = 'List'
ValueSet = @('North', 'South', 'East', 'West')
ErrorBody = "You must select an item from the list."
}
Add-ExcelDataValidationRule @ValidationParams @MoreValidationParams
#endregion
#region Creating a list data from another Excel Worksheet
$MoreValidationParams = @{
Range = 'C2:C1001'
ValidationType = 'List'
Formula = 'values!$a$1:$a$10'
ErrorBody = "You must select an item from the list.`r`nYou can add to the list on the values page" #Bucket
}
Add-ExcelDataValidationRule @ValidationParams @MoreValidationParams
#endregion
#region Creating a rule for numbers to be between 0 an 10000
$MoreValidationParams = @{
Range = 'F2:F1001'
ValidationType = 'Integer'
Operator = 'between'
Value = 0
Value2 = 10000
ErrorBody = 'Quantity must be a whole number between 0 and 10000'
}
Add-ExcelDataValidationRule @ValidationParams @MoreValidationParams
#endregion
#region Close Package
Close-ExcelPackage -ExcelPackage $excelPackage -Show
#endregion

View File

@@ -0,0 +1,6 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
ConvertFrom-ExcelToSQLInsert -TableName "Movies" -Path ".\Movies.xlsx" -ConvertEmptyStringsToNull
''
'# UseMSSQLSyntax'
ConvertFrom-ExcelToSQLInsert -UseMSSQLSyntax -TableName "Movies" -Path ".\Movies.xlsx" -ConvertEmptyStringsToNull

Binary file not shown.

View File

@@ -0,0 +1,46 @@
function Export-MultipleExcelSheets {
<#
.Synopsis
Takes a hash table of scriptblocks and exports each as a sheet in an Excel file
.Example
$p = Get-Process
$InfoMap = @{
PM = { $p | Select-Object company, pm }
Handles = { $p | Select-Object company, handles }
Services = { Get-Service }
}
Export-MultipleExcelSheets -Path $xlfile -InfoMap $InfoMap -Show -AutoSize
#>
param(
[Parameter(Mandatory = $true)]
$Path,
[Parameter(Mandatory = $true)]
[hashtable]$InfoMap,
[string]$Password,
[Switch]$Show,
[Switch]$AutoSize
)
$parameters = @{ } + $PSBoundParameters
$parameters.Remove("InfoMap")
$parameters.Remove("Show")
$parameters.Path = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($Path)
foreach ($entry in $InfoMap.GetEnumerator()) {
if ($entry.Value -is [scriptblock]) {
Write-Progress -Activity "Exporting" -Status "$($entry.Key)"
$parameters.WorkSheetname = $entry.Key
& $entry.Value | Export-Excel @parameters
}
else {
Write-Warning "$($entry.Key) not exported, needs to be a scriptblock"
}
}
if ($Show) { Invoke-Item $Path }
}

View File

@@ -0,0 +1,19 @@
. "$PSScriptRoot\Export-MultipleExcelSheets.ps1"
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$p = Get-Process
$InfoMap = @{
PM = { $p | Select-Object company, pm }
Handles = { $p | Select-Object company, handles }
Services = { Get-Service }
Files = { Get-ChildItem -File }
Albums = { ConvertFrom-Csv (Invoke-RestMethod https://raw.githubusercontent.com/dfinke/powershell-for-developers/master/chapter05/BeaverMusic/BeaverMusic.UI.Shell/albums.csv) }
WillNotGetExported = "Hello World"
}
Export-MultipleExcelSheets -Path $xlSourcefile -InfoMap $InfoMap -Show -AutoSize

View File

@@ -1,16 +1,20 @@
param ($fibonacciDigits=10)
$file = "fib.xlsx"
rm "fib.xlsx" -ErrorAction Ignore
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$(
New-PSItem 0
New-PSItem 1
(
2..$fibonacciDigits |
ForEach {
ForEach-Object {
New-PSItem ('=a{0}+a{1}' -f ($_+1),$_)
}
)
) | Export-Excel $file -Show
) | Export-Excel $xlSourcefile -Show

Binary file not shown.

View File

@@ -1,12 +1,19 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
Get-Process |
Select-Object Company,Handles,PM, NPM|
Export-Excel $xlfile -Show -AutoSize -CellStyleSB {
Select-Object Company,Handles,PM, NPM|
Export-Excel $xlSourcefile -Show -AutoSize -CellStyleSB {
param(
$workSheet,
$totalRows,
$lastColumn
)
Set-CellStyle $workSheet 1 $LastColumn Solid Cyan
foreach($row in (2..$totalRows | Where-Object {$_ % 2 -eq 0})) {

View File

@@ -0,0 +1,26 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$data = ConvertFrom-Csv @'
Item,Quantity,Price,Total Cost
Footballs,9,21.95,197.55
Cones,36,7.99,287.64
Shin Guards,14,10.95,153.3
Turf Shoes,22,79.95,1758.9
Baseballs,68,7.99,543.32
Baseball Gloves,31,65.00,2015.00
Baseball Bats,38,159.00,6042.00
'@
$f = "$env:TEMP\styles.xlsx"
Remove-Item $f -ErrorAction SilentlyContinue
$pkg = $data | Export-Excel -Path $f -AutoSize -PassThru
$ws = $pkg.Workbook.Worksheets["Sheet1"]
Set-ExcelRange -Worksheet $ws -Range "A2:C6" -BackgroundColor PeachPuff -FontColor Purple -FontSize 12 -Width 12
Set-ExcelRange -Worksheet $ws -Range "D2:D6" -BackgroundColor WhiteSmoke -FontColor Orange -Bold -FontSize 12 -Width 12
Set-ExcelRange -Worksheet $ws -Range "A1:D1" -BackgroundColor BlueViolet -FontColor Wheat -FontSize 12 -Width 12
Set-ExcelRange -Worksheet $ws -Range "A:A" -Width 15
Close-ExcelPackage -ExcelPackage $pkg -Show

View File

@@ -1,15 +1,22 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$RandomStyle = {
param(
$workSheet,
$totalRows,
$lastColumn
)
)
2..$totalRows | ForEach-Object{
Set-CellStyle $workSheet $_ $LastColumn Solid (Write-Output LightGreen Gray Red|Get-Random)
Set-CellStyle $workSheet $_ $LastColumn Solid (Get-Random @("LightGreen", "Gray", "Red"))
}
}
Get-Process |
Select-Object Company,Handles,PM, NPM|
Export-Excel $xlfile -Show -AutoSize -CellStyleSB $RandomStyle
Select-Object Company,Handles,PM, NPM|
Export-Excel $xlSourcefile -Show -AutoSize -CellStyleSB $RandomStyle

View File

@@ -1,26 +1,26 @@
if(!(gcm ig -ErrorAction SilentlyContinue)) {
if(!(Get-Command ig -ErrorAction SilentlyContinue)) {
"Use ``Install-Module NameIT`` to get the needed module from the gallery to support running this script"
return
}
}
$sign=@{sign=echo + -}
$location=@{location=echo Atlanta Newark Washington Chicago Philadelphia Houston Phoneix}
$sign=@{sign=@( "+", "-" )}
$location=@{location=@("Atlanta", "Newark", "Washington", "Chicago", "Philadelphia", "Houston", "Phoneix")}
$(1..6 | Foreach-Object {
$(1..6 | % {
$from=$to=""
while($from -eq $to) {
$from=ig "[location]" -CustomData $location
$to=ig "[location]" -CustomData $location
}
}
[double]$a=ig "########"
[double]$b=ig ".####"
[double]$c=ig "#######"
[double]$d=ig "[sign].##" -CustomData $sign
[double]$e=ig "###"
[double]$e=ig "###"
[double]$f=ig "[sign]##" -CustomData $sign
#"{0},{1},{2},{3},{4},{5},{6},{7}" -f $from, $to, $a, $b, $c, $d, $e, $f

View File

@@ -0,0 +1,101 @@
Race,Date,FinishPosition,Driver,GridPosition,Team,Points
Australian,25/03/2018,1,Sebastian Vettel,3,Ferrari,25
Australian,25/03/2018,2,Lewis Hamilton,1,Mercedes,18
Australian,25/03/2018,3,Kimi Räikkönen,2,Ferrari,15
Australian,25/03/2018,4,Daniel Ricciardo,8,Red Bull Racing-TAG Heuer,12
Australian,25/03/2018,5,Fernando Alonso,10,McLaren-Renault,10
Australian,25/03/2018,6,Max Verstappen,4,Red Bull Racing-TAG Heuer,8
Australian,25/03/2018,7,Nico Hülkenberg,7,Renault,6
Australian,25/03/2018,8,Valtteri Bottas,15,Mercedes,4
Australian,25/03/2018,9,Stoffel Vandoorne,11,McLaren-Renault,2
Australian,25/03/2018,10,Carlos Sainz,9,Renault,1
Bahrain,08/04/2018,1,Sebastian Vettel,1,Ferrari,25
Bahrain,08/04/2018,2,Valtteri Bottas,3,Mercedes,18
Bahrain,08/04/2018,3,Lewis Hamilton,9,Mercedes,15
Bahrain,08/04/2018,4,Pierre Gasly,5,STR-Honda,12
Bahrain,08/04/2018,5,Kevin Magnussen,6,Haas-Ferrari,10
Bahrain,08/04/2018,6,Nico Hülkenberg,7,Renault,8
Bahrain,08/04/2018,7,Fernando Alonso,13,McLaren-Renault,6
Bahrain,08/04/2018,8,Stoffel Vandoorne,14,McLaren-Renault,4
Bahrain,08/04/2018,9,Marcus Ericsson,17,Sauber-Ferrari,2
Bahrain,08/04/2018,10,Esteban Ocon,8,Force India-Mercedes,1
Chinese,15/04/2018,1,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,25
Chinese,15/04/2018,2,Valtteri Bottas,3,Mercedes,18
Chinese,15/04/2018,3,Kimi Räikkönen,2,Ferrari,15
Chinese,15/04/2018,4,Lewis Hamilton,4,Mercedes,12
Chinese,15/04/2018,5,Max Verstappen,5,Red Bull Racing-TAG Heuer,10
Chinese,15/04/2018,6,Nico Hülkenberg,7,Renault,8
Chinese,15/04/2018,7,Fernando Alonso,13,McLaren-Renault,6
Chinese,15/04/2018,8,Sebastian Vettel,1,Ferrari,4
Chinese,15/04/2018,9,Carlos Sainz,9,Renault,2
Chinese,15/04/2018,10,Kevin Magnussen,11,Haas-Ferrari,1
Azerbaijan,29/04/2018,1,Lewis Hamilton,2,Mercedes,25
Azerbaijan,29/04/2018,2,Kimi Räikkönen,6,Ferrari,18
Azerbaijan,29/04/2018,3,Sergio Pérez,8,Force India-Mercedes,15
Azerbaijan,29/04/2018,4,Sebastian Vettel,1,Ferrari,12
Azerbaijan,29/04/2018,5,Carlos Sainz,9,Renault,10
Azerbaijan,29/04/2018,6,Charles Leclerc,13,Sauber-Ferrari,8
Azerbaijan,29/04/2018,7,Fernando Alonso,12,McLaren-Renault,6
Azerbaijan,29/04/2018,8,Lance Stroll,10,Williams-Mercedes,4
Azerbaijan,29/04/2018,9,Stoffel Vandoorne,16,McLaren-Renault,2
Azerbaijan,29/04/2018,10,Brendon Hartley,19,STR-Honda,1
Spanish,13/05/2018,1,Lewis Hamilton,1,Mercedes,25
Spanish,13/05/2018,2,Valtteri Bottas,2,Mercedes,18
Spanish,13/05/2018,3,Max Verstappen,5,Red Bull Racing-TAG Heuer,15
Spanish,13/05/2018,4,Sebastian Vettel,3,Ferrari,12
Spanish,13/05/2018,5,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,10
Spanish,13/05/2018,6,Kevin Magnussen,7,Haas-Ferrari,8
Spanish,13/05/2018,7,Carlos Sainz,9,Renault,6
Spanish,13/05/2018,8,Fernando Alonso,8,McLaren-Renault,4
Spanish,13/05/2018,9,Sergio Pérez,15,Force India-Mercedes,2
Spanish,13/05/2018,10,Charles Leclerc,14,Sauber-Ferrari,1
Monaco,27/05/2018,1,Daniel Ricciardo,1,Red Bull Racing-TAG Heuer,25
Monaco,27/05/2018,2,Sebastian Vettel,2,Ferrari,18
Monaco,27/05/2018,3,Lewis Hamilton,3,Mercedes,15
Monaco,27/05/2018,4,Kimi Räikkönen,4,Ferrari,12
Monaco,27/05/2018,5,Valtteri Bottas,5,Mercedes,10
Monaco,27/05/2018,6,Esteban Ocon,6,Force India-Mercedes,8
Monaco,27/05/2018,7,Pierre Gasly,10,STR-Honda,6
Monaco,27/05/2018,8,Nico Hülkenberg,11,Renault,4
Monaco,27/05/2018,9,Max Verstappen,20,Red Bull Racing-TAG Heuer,2
Monaco,27/05/2018,10,Carlos Sainz,8,Renault,1
Canadian,10/06/2018,1,Sebastian Vettel,1,Ferrari,25
Canadian,10/06/2018,2,Valtteri Bottas,2,Mercedes,18
Canadian,10/06/2018,3,Max Verstappen,3,Red Bull Racing-TAG Heuer,15
Canadian,10/06/2018,4,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,12
Canadian,10/06/2018,5,Lewis Hamilton,4,Mercedes,10
Canadian,10/06/2018,6,Kimi Räikkönen,5,Ferrari,8
Canadian,10/06/2018,7,Nico Hülkenberg,7,Renault,6
Canadian,10/06/2018,8,Carlos Sainz,9,Renault,4
Canadian,10/06/2018,9,Esteban Ocon,8,Force India-Mercedes,2
Canadian,10/06/2018,10,Charles Leclerc,13,Sauber-Ferrari,1
French,24/06/2018,1,Lewis Hamilton,1,Mercedes,25
French,24/06/2018,2,Max Verstappen,4,Red Bull Racing-TAG Heuer,18
French,24/06/2018,3,Kimi Räikkönen,6,Ferrari,15
French,24/06/2018,4,Daniel Ricciardo,5,Red Bull Racing-TAG Heuer,12
French,24/06/2018,5,Sebastian Vettel,3,Ferrari,10
French,24/06/2018,6,Kevin Magnussen,9,Haas-Ferrari,8
French,24/06/2018,7,Valtteri Bottas,2,Mercedes,6
French,24/06/2018,8,Carlos Sainz,7,Renault,4
French,24/06/2018,9,Nico Hülkenberg,12,Renault,2
French,24/06/2018,10,Charles Leclerc,8,Sauber-Ferrari,1
Austrian,01/07/2018,1,Max Verstappen,4,Red Bull Racing-TAG Heuer,25
Austrian,01/07/2018,2,Kimi Räikkönen,3,Ferrari,18
Austrian,01/07/2018,3,Sebastian Vettel,6,Ferrari,15
Austrian,01/07/2018,4,Romain Grosjean,5,Haas-Ferrari,12
Austrian,01/07/2018,5,Kevin Magnussen,8,Haas-Ferrari,10
Austrian,01/07/2018,6,Esteban Ocon,11,Force India-Mercedes,8
Austrian,01/07/2018,7,Sergio Pérez,15,Force India-Mercedes,6
Austrian,01/07/2018,8,Fernando Alonso,20,McLaren-Renault,4
Austrian,01/07/2018,9,Charles Leclerc,17,Sauber-Ferrari,2
Austrian,01/07/2018,10,Marcus Ericsson,18,Sauber-Ferrari,1
British,08/07/2018,1,Sebastian Vettel,2,Ferrari,25
British,08/07/2018,2,Lewis Hamilton,1,Mercedes,18
British,08/07/2018,3,Kimi Räikkönen,3,Ferrari,15
British,08/07/2018,4,Valtteri Bottas,4,Mercedes,12
British,08/07/2018,5,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,10
British,08/07/2018,6,Nico Hülkenberg,11,Renault,8
British,08/07/2018,7,Esteban Ocon,10,Force India-Mercedes,6
British,08/07/2018,8,Fernando Alonso,13,McLaren-Renault,4
British,08/07/2018,9,Kevin Magnussen,7,Haas-Ferrari,2
British,08/07/2018,10,Sergio Pérez,12,Force India-Mercedes,1
1 Race Date FinishPosition Driver GridPosition Team Points
2 Australian 25/03/2018 1 Sebastian Vettel 3 Ferrari 25
3 Australian 25/03/2018 2 Lewis Hamilton 1 Mercedes 18
4 Australian 25/03/2018 3 Kimi Räikkönen 2 Ferrari 15
5 Australian 25/03/2018 4 Daniel Ricciardo 8 Red Bull Racing-TAG Heuer 12
6 Australian 25/03/2018 5 Fernando Alonso 10 McLaren-Renault 10
7 Australian 25/03/2018 6 Max Verstappen 4 Red Bull Racing-TAG Heuer 8
8 Australian 25/03/2018 7 Nico Hülkenberg 7 Renault 6
9 Australian 25/03/2018 8 Valtteri Bottas 15 Mercedes 4
10 Australian 25/03/2018 9 Stoffel Vandoorne 11 McLaren-Renault 2
11 Australian 25/03/2018 10 Carlos Sainz 9 Renault 1
12 Bahrain 08/04/2018 1 Sebastian Vettel 1 Ferrari 25
13 Bahrain 08/04/2018 2 Valtteri Bottas 3 Mercedes 18
14 Bahrain 08/04/2018 3 Lewis Hamilton 9 Mercedes 15
15 Bahrain 08/04/2018 4 Pierre Gasly 5 STR-Honda 12
16 Bahrain 08/04/2018 5 Kevin Magnussen 6 Haas-Ferrari 10
17 Bahrain 08/04/2018 6 Nico Hülkenberg 7 Renault 8
18 Bahrain 08/04/2018 7 Fernando Alonso 13 McLaren-Renault 6
19 Bahrain 08/04/2018 8 Stoffel Vandoorne 14 McLaren-Renault 4
20 Bahrain 08/04/2018 9 Marcus Ericsson 17 Sauber-Ferrari 2
21 Bahrain 08/04/2018 10 Esteban Ocon 8 Force India-Mercedes 1
22 Chinese 15/04/2018 1 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 25
23 Chinese 15/04/2018 2 Valtteri Bottas 3 Mercedes 18
24 Chinese 15/04/2018 3 Kimi Räikkönen 2 Ferrari 15
25 Chinese 15/04/2018 4 Lewis Hamilton 4 Mercedes 12
26 Chinese 15/04/2018 5 Max Verstappen 5 Red Bull Racing-TAG Heuer 10
27 Chinese 15/04/2018 6 Nico Hülkenberg 7 Renault 8
28 Chinese 15/04/2018 7 Fernando Alonso 13 McLaren-Renault 6
29 Chinese 15/04/2018 8 Sebastian Vettel 1 Ferrari 4
30 Chinese 15/04/2018 9 Carlos Sainz 9 Renault 2
31 Chinese 15/04/2018 10 Kevin Magnussen 11 Haas-Ferrari 1
32 Azerbaijan 29/04/2018 1 Lewis Hamilton 2 Mercedes 25
33 Azerbaijan 29/04/2018 2 Kimi Räikkönen 6 Ferrari 18
34 Azerbaijan 29/04/2018 3 Sergio Pérez 8 Force India-Mercedes 15
35 Azerbaijan 29/04/2018 4 Sebastian Vettel 1 Ferrari 12
36 Azerbaijan 29/04/2018 5 Carlos Sainz 9 Renault 10
37 Azerbaijan 29/04/2018 6 Charles Leclerc 13 Sauber-Ferrari 8
38 Azerbaijan 29/04/2018 7 Fernando Alonso 12 McLaren-Renault 6
39 Azerbaijan 29/04/2018 8 Lance Stroll 10 Williams-Mercedes 4
40 Azerbaijan 29/04/2018 9 Stoffel Vandoorne 16 McLaren-Renault 2
41 Azerbaijan 29/04/2018 10 Brendon Hartley 19 STR-Honda 1
42 Spanish 13/05/2018 1 Lewis Hamilton 1 Mercedes 25
43 Spanish 13/05/2018 2 Valtteri Bottas 2 Mercedes 18
44 Spanish 13/05/2018 3 Max Verstappen 5 Red Bull Racing-TAG Heuer 15
45 Spanish 13/05/2018 4 Sebastian Vettel 3 Ferrari 12
46 Spanish 13/05/2018 5 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 10
47 Spanish 13/05/2018 6 Kevin Magnussen 7 Haas-Ferrari 8
48 Spanish 13/05/2018 7 Carlos Sainz 9 Renault 6
49 Spanish 13/05/2018 8 Fernando Alonso 8 McLaren-Renault 4
50 Spanish 13/05/2018 9 Sergio Pérez 15 Force India-Mercedes 2
51 Spanish 13/05/2018 10 Charles Leclerc 14 Sauber-Ferrari 1
52 Monaco 27/05/2018 1 Daniel Ricciardo 1 Red Bull Racing-TAG Heuer 25
53 Monaco 27/05/2018 2 Sebastian Vettel 2 Ferrari 18
54 Monaco 27/05/2018 3 Lewis Hamilton 3 Mercedes 15
55 Monaco 27/05/2018 4 Kimi Räikkönen 4 Ferrari 12
56 Monaco 27/05/2018 5 Valtteri Bottas 5 Mercedes 10
57 Monaco 27/05/2018 6 Esteban Ocon 6 Force India-Mercedes 8
58 Monaco 27/05/2018 7 Pierre Gasly 10 STR-Honda 6
59 Monaco 27/05/2018 8 Nico Hülkenberg 11 Renault 4
60 Monaco 27/05/2018 9 Max Verstappen 20 Red Bull Racing-TAG Heuer 2
61 Monaco 27/05/2018 10 Carlos Sainz 8 Renault 1
62 Canadian 10/06/2018 1 Sebastian Vettel 1 Ferrari 25
63 Canadian 10/06/2018 2 Valtteri Bottas 2 Mercedes 18
64 Canadian 10/06/2018 3 Max Verstappen 3 Red Bull Racing-TAG Heuer 15
65 Canadian 10/06/2018 4 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 12
66 Canadian 10/06/2018 5 Lewis Hamilton 4 Mercedes 10
67 Canadian 10/06/2018 6 Kimi Räikkönen 5 Ferrari 8
68 Canadian 10/06/2018 7 Nico Hülkenberg 7 Renault 6
69 Canadian 10/06/2018 8 Carlos Sainz 9 Renault 4
70 Canadian 10/06/2018 9 Esteban Ocon 8 Force India-Mercedes 2
71 Canadian 10/06/2018 10 Charles Leclerc 13 Sauber-Ferrari 1
72 French 24/06/2018 1 Lewis Hamilton 1 Mercedes 25
73 French 24/06/2018 2 Max Verstappen 4 Red Bull Racing-TAG Heuer 18
74 French 24/06/2018 3 Kimi Räikkönen 6 Ferrari 15
75 French 24/06/2018 4 Daniel Ricciardo 5 Red Bull Racing-TAG Heuer 12
76 French 24/06/2018 5 Sebastian Vettel 3 Ferrari 10
77 French 24/06/2018 6 Kevin Magnussen 9 Haas-Ferrari 8
78 French 24/06/2018 7 Valtteri Bottas 2 Mercedes 6
79 French 24/06/2018 8 Carlos Sainz 7 Renault 4
80 French 24/06/2018 9 Nico Hülkenberg 12 Renault 2
81 French 24/06/2018 10 Charles Leclerc 8 Sauber-Ferrari 1
82 Austrian 01/07/2018 1 Max Verstappen 4 Red Bull Racing-TAG Heuer 25
83 Austrian 01/07/2018 2 Kimi Räikkönen 3 Ferrari 18
84 Austrian 01/07/2018 3 Sebastian Vettel 6 Ferrari 15
85 Austrian 01/07/2018 4 Romain Grosjean 5 Haas-Ferrari 12
86 Austrian 01/07/2018 5 Kevin Magnussen 8 Haas-Ferrari 10
87 Austrian 01/07/2018 6 Esteban Ocon 11 Force India-Mercedes 8
88 Austrian 01/07/2018 7 Sergio Pérez 15 Force India-Mercedes 6
89 Austrian 01/07/2018 8 Fernando Alonso 20 McLaren-Renault 4
90 Austrian 01/07/2018 9 Charles Leclerc 17 Sauber-Ferrari 2
91 Austrian 01/07/2018 10 Marcus Ericsson 18 Sauber-Ferrari 1
92 British 08/07/2018 1 Sebastian Vettel 2 Ferrari 25
93 British 08/07/2018 2 Lewis Hamilton 1 Mercedes 18
94 British 08/07/2018 3 Kimi Räikkönen 3 Ferrari 15
95 British 08/07/2018 4 Valtteri Bottas 4 Mercedes 12
96 British 08/07/2018 5 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 10
97 British 08/07/2018 6 Nico Hülkenberg 11 Renault 8
98 British 08/07/2018 7 Esteban Ocon 10 Force India-Mercedes 6
99 British 08/07/2018 8 Fernando Alonso 13 McLaren-Renault 4
100 British 08/07/2018 9 Kevin Magnussen 7 Haas-Ferrari 2
101 British 08/07/2018 10 Sergio Pérez 12 Force India-Mercedes 1

View File

@@ -0,0 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Points `
-PivotRows Driver, Date -PivotData @{Points = "SUM"} -GroupDateRow Date -GroupDatePart Years, Months
Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlSourcefile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition

View File

@@ -0,0 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Places `
-PivotRows Driver, FinishPosition -PivotData @{Date = "Count"} -GroupNumericRow FinishPosition -GroupNumericMin 1 -GroupNumericMax 25 -GroupNumericInterval 3
Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlSourcefile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition

View File

@@ -0,0 +1,42 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
$data = ConvertFrom-Csv @"
Timestamp,Tenant
10/29/2018 3:00:00.123,1
10/29/2018 3:00:10.456,1
10/29/2018 3:01:20.389,1
10/29/2018 3:00:30.222,1
10/29/2018 3:00:40.143,1
10/29/2018 3:00:50.809,1
10/29/2018 3:01:00.193,1
10/29/2018 3:01:10.555,1
10/29/2018 3:01:20.739,1
10/29/2018 3:01:30.912,1
10/29/2018 3:01:40.989,1
10/29/2018 3:01:50.545,1
10/29/2018 3:02:00.999,1
"@ | Select-Object @{n = 'Timestamp'; e = {Get-date $_.timestamp}}, tenant, @{n = 'Bucket'; e = { - (Get-date $_.timestamp).Second % 30}}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$pivotDefParams = @{
PivotTableName = 'Timestamp Buckets'
PivotRows = @('Timestamp', 'Tenant')
PivotData = @{'Bucket' = 'count'}
GroupDateRow = 'TimeStamp'
GroupDatePart = @('Hours', 'Minutes')
Activate = $true
}
$excelParams = @{
PivotTableDefinition = New-PivotTableDefinition @pivotDefParams
Path = $xlSourcefile
WorkSheetname = "Log Data"
AutoSize = $true
AutoFilter = $true
Show = $true
}
$data | Export-Excel @excelParams

View File

@@ -0,0 +1,101 @@
Race,Date,FinishPosition,Driver,GridPosition,Team,Points
Australian,25/03/2018,1,Sebastian Vettel,3,Ferrari,25
Australian,25/03/2018,2,Lewis Hamilton,1,Mercedes,18
Australian,25/03/2018,3,Kimi Räikkönen,2,Ferrari,15
Australian,25/03/2018,4,Daniel Ricciardo,8,Red Bull Racing-TAG Heuer,12
Australian,25/03/2018,5,Fernando Alonso,10,McLaren-Renault,10
Australian,25/03/2018,6,Max Verstappen,4,Red Bull Racing-TAG Heuer,8
Australian,25/03/2018,7,Nico Hülkenberg,7,Renault,6
Australian,25/03/2018,8,Valtteri Bottas,15,Mercedes,4
Australian,25/03/2018,9,Stoffel Vandoorne,11,McLaren-Renault,2
Australian,25/03/2018,10,Carlos Sainz,9,Renault,1
Bahrain,08/04/2018,1,Sebastian Vettel,1,Ferrari,25
Bahrain,08/04/2018,2,Valtteri Bottas,3,Mercedes,18
Bahrain,08/04/2018,3,Lewis Hamilton,9,Mercedes,15
Bahrain,08/04/2018,4,Pierre Gasly,5,STR-Honda,12
Bahrain,08/04/2018,5,Kevin Magnussen,6,Haas-Ferrari,10
Bahrain,08/04/2018,6,Nico Hülkenberg,7,Renault,8
Bahrain,08/04/2018,7,Fernando Alonso,13,McLaren-Renault,6
Bahrain,08/04/2018,8,Stoffel Vandoorne,14,McLaren-Renault,4
Bahrain,08/04/2018,9,Marcus Ericsson,17,Sauber-Ferrari,2
Bahrain,08/04/2018,10,Esteban Ocon,8,Force India-Mercedes,1
Chinese,15/04/2018,1,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,25
Chinese,15/04/2018,2,Valtteri Bottas,3,Mercedes,18
Chinese,15/04/2018,3,Kimi Räikkönen,2,Ferrari,15
Chinese,15/04/2018,4,Lewis Hamilton,4,Mercedes,12
Chinese,15/04/2018,5,Max Verstappen,5,Red Bull Racing-TAG Heuer,10
Chinese,15/04/2018,6,Nico Hülkenberg,7,Renault,8
Chinese,15/04/2018,7,Fernando Alonso,13,McLaren-Renault,6
Chinese,15/04/2018,8,Sebastian Vettel,1,Ferrari,4
Chinese,15/04/2018,9,Carlos Sainz,9,Renault,2
Chinese,15/04/2018,10,Kevin Magnussen,11,Haas-Ferrari,1
Azerbaijan,29/04/2018,1,Lewis Hamilton,2,Mercedes,25
Azerbaijan,29/04/2018,2,Kimi Räikkönen,6,Ferrari,18
Azerbaijan,29/04/2018,3,Sergio Pérez,8,Force India-Mercedes,15
Azerbaijan,29/04/2018,4,Sebastian Vettel,1,Ferrari,12
Azerbaijan,29/04/2018,5,Carlos Sainz,9,Renault,10
Azerbaijan,29/04/2018,6,Charles Leclerc,13,Sauber-Ferrari,8
Azerbaijan,29/04/2018,7,Fernando Alonso,12,McLaren-Renault,6
Azerbaijan,29/04/2018,8,Lance Stroll,10,Williams-Mercedes,4
Azerbaijan,29/04/2018,9,Stoffel Vandoorne,16,McLaren-Renault,2
Azerbaijan,29/04/2018,10,Brendon Hartley,19,STR-Honda,1
Spanish,13/05/2018,1,Lewis Hamilton,1,Mercedes,25
Spanish,13/05/2018,2,Valtteri Bottas,2,Mercedes,18
Spanish,13/05/2018,3,Max Verstappen,5,Red Bull Racing-TAG Heuer,15
Spanish,13/05/2018,4,Sebastian Vettel,3,Ferrari,12
Spanish,13/05/2018,5,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,10
Spanish,13/05/2018,6,Kevin Magnussen,7,Haas-Ferrari,8
Spanish,13/05/2018,7,Carlos Sainz,9,Renault,6
Spanish,13/05/2018,8,Fernando Alonso,8,McLaren-Renault,4
Spanish,13/05/2018,9,Sergio Pérez,15,Force India-Mercedes,2
Spanish,13/05/2018,10,Charles Leclerc,14,Sauber-Ferrari,1
Monaco,27/05/2018,1,Daniel Ricciardo,1,Red Bull Racing-TAG Heuer,25
Monaco,27/05/2018,2,Sebastian Vettel,2,Ferrari,18
Monaco,27/05/2018,3,Lewis Hamilton,3,Mercedes,15
Monaco,27/05/2018,4,Kimi Räikkönen,4,Ferrari,12
Monaco,27/05/2018,5,Valtteri Bottas,5,Mercedes,10
Monaco,27/05/2018,6,Esteban Ocon,6,Force India-Mercedes,8
Monaco,27/05/2018,7,Pierre Gasly,10,STR-Honda,6
Monaco,27/05/2018,8,Nico Hülkenberg,11,Renault,4
Monaco,27/05/2018,9,Max Verstappen,20,Red Bull Racing-TAG Heuer,2
Monaco,27/05/2018,10,Carlos Sainz,8,Renault,1
Canadian,10/06/2018,1,Sebastian Vettel,1,Ferrari,25
Canadian,10/06/2018,2,Valtteri Bottas,2,Mercedes,18
Canadian,10/06/2018,3,Max Verstappen,3,Red Bull Racing-TAG Heuer,15
Canadian,10/06/2018,4,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,12
Canadian,10/06/2018,5,Lewis Hamilton,4,Mercedes,10
Canadian,10/06/2018,6,Kimi Räikkönen,5,Ferrari,8
Canadian,10/06/2018,7,Nico Hülkenberg,7,Renault,6
Canadian,10/06/2018,8,Carlos Sainz,9,Renault,4
Canadian,10/06/2018,9,Esteban Ocon,8,Force India-Mercedes,2
Canadian,10/06/2018,10,Charles Leclerc,13,Sauber-Ferrari,1
French,24/06/2018,1,Lewis Hamilton,1,Mercedes,25
French,24/06/2018,2,Max Verstappen,4,Red Bull Racing-TAG Heuer,18
French,24/06/2018,3,Kimi Räikkönen,6,Ferrari,15
French,24/06/2018,4,Daniel Ricciardo,5,Red Bull Racing-TAG Heuer,12
French,24/06/2018,5,Sebastian Vettel,3,Ferrari,10
French,24/06/2018,6,Kevin Magnussen,9,Haas-Ferrari,8
French,24/06/2018,7,Valtteri Bottas,2,Mercedes,6
French,24/06/2018,8,Carlos Sainz,7,Renault,4
French,24/06/2018,9,Nico Hülkenberg,12,Renault,2
French,24/06/2018,10,Charles Leclerc,8,Sauber-Ferrari,1
Austrian,01/07/2018,1,Max Verstappen,4,Red Bull Racing-TAG Heuer,25
Austrian,01/07/2018,2,Kimi Räikkönen,3,Ferrari,18
Austrian,01/07/2018,3,Sebastian Vettel,6,Ferrari,15
Austrian,01/07/2018,4,Romain Grosjean,5,Haas-Ferrari,12
Austrian,01/07/2018,5,Kevin Magnussen,8,Haas-Ferrari,10
Austrian,01/07/2018,6,Esteban Ocon,11,Force India-Mercedes,8
Austrian,01/07/2018,7,Sergio Pérez,15,Force India-Mercedes,6
Austrian,01/07/2018,8,Fernando Alonso,20,McLaren-Renault,4
Austrian,01/07/2018,9,Charles Leclerc,17,Sauber-Ferrari,2
Austrian,01/07/2018,10,Marcus Ericsson,18,Sauber-Ferrari,1
British,08/07/2018,1,Sebastian Vettel,2,Ferrari,25
British,08/07/2018,2,Lewis Hamilton,1,Mercedes,18
British,08/07/2018,3,Kimi Räikkönen,3,Ferrari,15
British,08/07/2018,4,Valtteri Bottas,4,Mercedes,12
British,08/07/2018,5,Daniel Ricciardo,6,Red Bull Racing-TAG Heuer,10
British,08/07/2018,6,Nico Hülkenberg,11,Renault,8
British,08/07/2018,7,Esteban Ocon,10,Force India-Mercedes,6
British,08/07/2018,8,Fernando Alonso,13,McLaren-Renault,4
British,08/07/2018,9,Kevin Magnussen,7,Haas-Ferrari,2
British,08/07/2018,10,Sergio Pérez,12,Force India-Mercedes,1
1 Race Date FinishPosition Driver GridPosition Team Points
2 Australian 25/03/2018 1 Sebastian Vettel 3 Ferrari 25
3 Australian 25/03/2018 2 Lewis Hamilton 1 Mercedes 18
4 Australian 25/03/2018 3 Kimi Räikkönen 2 Ferrari 15
5 Australian 25/03/2018 4 Daniel Ricciardo 8 Red Bull Racing-TAG Heuer 12
6 Australian 25/03/2018 5 Fernando Alonso 10 McLaren-Renault 10
7 Australian 25/03/2018 6 Max Verstappen 4 Red Bull Racing-TAG Heuer 8
8 Australian 25/03/2018 7 Nico Hülkenberg 7 Renault 6
9 Australian 25/03/2018 8 Valtteri Bottas 15 Mercedes 4
10 Australian 25/03/2018 9 Stoffel Vandoorne 11 McLaren-Renault 2
11 Australian 25/03/2018 10 Carlos Sainz 9 Renault 1
12 Bahrain 08/04/2018 1 Sebastian Vettel 1 Ferrari 25
13 Bahrain 08/04/2018 2 Valtteri Bottas 3 Mercedes 18
14 Bahrain 08/04/2018 3 Lewis Hamilton 9 Mercedes 15
15 Bahrain 08/04/2018 4 Pierre Gasly 5 STR-Honda 12
16 Bahrain 08/04/2018 5 Kevin Magnussen 6 Haas-Ferrari 10
17 Bahrain 08/04/2018 6 Nico Hülkenberg 7 Renault 8
18 Bahrain 08/04/2018 7 Fernando Alonso 13 McLaren-Renault 6
19 Bahrain 08/04/2018 8 Stoffel Vandoorne 14 McLaren-Renault 4
20 Bahrain 08/04/2018 9 Marcus Ericsson 17 Sauber-Ferrari 2
21 Bahrain 08/04/2018 10 Esteban Ocon 8 Force India-Mercedes 1
22 Chinese 15/04/2018 1 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 25
23 Chinese 15/04/2018 2 Valtteri Bottas 3 Mercedes 18
24 Chinese 15/04/2018 3 Kimi Räikkönen 2 Ferrari 15
25 Chinese 15/04/2018 4 Lewis Hamilton 4 Mercedes 12
26 Chinese 15/04/2018 5 Max Verstappen 5 Red Bull Racing-TAG Heuer 10
27 Chinese 15/04/2018 6 Nico Hülkenberg 7 Renault 8
28 Chinese 15/04/2018 7 Fernando Alonso 13 McLaren-Renault 6
29 Chinese 15/04/2018 8 Sebastian Vettel 1 Ferrari 4
30 Chinese 15/04/2018 9 Carlos Sainz 9 Renault 2
31 Chinese 15/04/2018 10 Kevin Magnussen 11 Haas-Ferrari 1
32 Azerbaijan 29/04/2018 1 Lewis Hamilton 2 Mercedes 25
33 Azerbaijan 29/04/2018 2 Kimi Räikkönen 6 Ferrari 18
34 Azerbaijan 29/04/2018 3 Sergio Pérez 8 Force India-Mercedes 15
35 Azerbaijan 29/04/2018 4 Sebastian Vettel 1 Ferrari 12
36 Azerbaijan 29/04/2018 5 Carlos Sainz 9 Renault 10
37 Azerbaijan 29/04/2018 6 Charles Leclerc 13 Sauber-Ferrari 8
38 Azerbaijan 29/04/2018 7 Fernando Alonso 12 McLaren-Renault 6
39 Azerbaijan 29/04/2018 8 Lance Stroll 10 Williams-Mercedes 4
40 Azerbaijan 29/04/2018 9 Stoffel Vandoorne 16 McLaren-Renault 2
41 Azerbaijan 29/04/2018 10 Brendon Hartley 19 STR-Honda 1
42 Spanish 13/05/2018 1 Lewis Hamilton 1 Mercedes 25
43 Spanish 13/05/2018 2 Valtteri Bottas 2 Mercedes 18
44 Spanish 13/05/2018 3 Max Verstappen 5 Red Bull Racing-TAG Heuer 15
45 Spanish 13/05/2018 4 Sebastian Vettel 3 Ferrari 12
46 Spanish 13/05/2018 5 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 10
47 Spanish 13/05/2018 6 Kevin Magnussen 7 Haas-Ferrari 8
48 Spanish 13/05/2018 7 Carlos Sainz 9 Renault 6
49 Spanish 13/05/2018 8 Fernando Alonso 8 McLaren-Renault 4
50 Spanish 13/05/2018 9 Sergio Pérez 15 Force India-Mercedes 2
51 Spanish 13/05/2018 10 Charles Leclerc 14 Sauber-Ferrari 1
52 Monaco 27/05/2018 1 Daniel Ricciardo 1 Red Bull Racing-TAG Heuer 25
53 Monaco 27/05/2018 2 Sebastian Vettel 2 Ferrari 18
54 Monaco 27/05/2018 3 Lewis Hamilton 3 Mercedes 15
55 Monaco 27/05/2018 4 Kimi Räikkönen 4 Ferrari 12
56 Monaco 27/05/2018 5 Valtteri Bottas 5 Mercedes 10
57 Monaco 27/05/2018 6 Esteban Ocon 6 Force India-Mercedes 8
58 Monaco 27/05/2018 7 Pierre Gasly 10 STR-Honda 6
59 Monaco 27/05/2018 8 Nico Hülkenberg 11 Renault 4
60 Monaco 27/05/2018 9 Max Verstappen 20 Red Bull Racing-TAG Heuer 2
61 Monaco 27/05/2018 10 Carlos Sainz 8 Renault 1
62 Canadian 10/06/2018 1 Sebastian Vettel 1 Ferrari 25
63 Canadian 10/06/2018 2 Valtteri Bottas 2 Mercedes 18
64 Canadian 10/06/2018 3 Max Verstappen 3 Red Bull Racing-TAG Heuer 15
65 Canadian 10/06/2018 4 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 12
66 Canadian 10/06/2018 5 Lewis Hamilton 4 Mercedes 10
67 Canadian 10/06/2018 6 Kimi Räikkönen 5 Ferrari 8
68 Canadian 10/06/2018 7 Nico Hülkenberg 7 Renault 6
69 Canadian 10/06/2018 8 Carlos Sainz 9 Renault 4
70 Canadian 10/06/2018 9 Esteban Ocon 8 Force India-Mercedes 2
71 Canadian 10/06/2018 10 Charles Leclerc 13 Sauber-Ferrari 1
72 French 24/06/2018 1 Lewis Hamilton 1 Mercedes 25
73 French 24/06/2018 2 Max Verstappen 4 Red Bull Racing-TAG Heuer 18
74 French 24/06/2018 3 Kimi Räikkönen 6 Ferrari 15
75 French 24/06/2018 4 Daniel Ricciardo 5 Red Bull Racing-TAG Heuer 12
76 French 24/06/2018 5 Sebastian Vettel 3 Ferrari 10
77 French 24/06/2018 6 Kevin Magnussen 9 Haas-Ferrari 8
78 French 24/06/2018 7 Valtteri Bottas 2 Mercedes 6
79 French 24/06/2018 8 Carlos Sainz 7 Renault 4
80 French 24/06/2018 9 Nico Hülkenberg 12 Renault 2
81 French 24/06/2018 10 Charles Leclerc 8 Sauber-Ferrari 1
82 Austrian 01/07/2018 1 Max Verstappen 4 Red Bull Racing-TAG Heuer 25
83 Austrian 01/07/2018 2 Kimi Räikkönen 3 Ferrari 18
84 Austrian 01/07/2018 3 Sebastian Vettel 6 Ferrari 15
85 Austrian 01/07/2018 4 Romain Grosjean 5 Haas-Ferrari 12
86 Austrian 01/07/2018 5 Kevin Magnussen 8 Haas-Ferrari 10
87 Austrian 01/07/2018 6 Esteban Ocon 11 Force India-Mercedes 8
88 Austrian 01/07/2018 7 Sergio Pérez 15 Force India-Mercedes 6
89 Austrian 01/07/2018 8 Fernando Alonso 20 McLaren-Renault 4
90 Austrian 01/07/2018 9 Charles Leclerc 17 Sauber-Ferrari 2
91 Austrian 01/07/2018 10 Marcus Ericsson 18 Sauber-Ferrari 1
92 British 08/07/2018 1 Sebastian Vettel 2 Ferrari 25
93 British 08/07/2018 2 Lewis Hamilton 1 Mercedes 18
94 British 08/07/2018 3 Kimi Räikkönen 3 Ferrari 15
95 British 08/07/2018 4 Valtteri Bottas 4 Mercedes 12
96 British 08/07/2018 5 Daniel Ricciardo 6 Red Bull Racing-TAG Heuer 10
97 British 08/07/2018 6 Nico Hülkenberg 11 Renault 8
98 British 08/07/2018 7 Esteban Ocon 10 Force India-Mercedes 6
99 British 08/07/2018 8 Fernando Alonso 13 McLaren-Renault 4
100 British 08/07/2018 9 Kevin Magnussen 7 Haas-Ferrari 2
101 British 08/07/2018 10 Sergio Pérez 12 Force India-Mercedes 1

View File

@@ -1,7 +1,8 @@
#$(
# New-PSItem 'Every Man a King' http://orisonswettmarden.wwwhubs.com/ccount/click.php?id=2
# New-PSItem 'Be Good to Yourself' http://orisonswettmarden.wwwhubs.com/ccount/click.php?id=3
# New-PSItem 'Character : The Grandest Thing in the World' http://orisonswettmarden.wwwhubs.com/ccount/click.php?id=4
# New-PSItem 'The Conquest of Worry' http://orisonswettmarden.wwwhubs.com/ccount/click.php?id=5
# New-PSItem 'Success Nuggets' http://orisonswettmarden.wwwhubs.com/ccount/click.php?id=6
#) | Export-Excel hyperlinks.xlsx -Show -AutoSize
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
@"
site,link
google,http://www.google.com
stackoverflow,http://stackoverflow.com
microsoft,http://microsoft.com
"@ | ConvertFrom-Csv | Export-Excel

View File

@@ -0,0 +1,28 @@
#First 10 races is a CSV file containing the top 10 finishers for the first 10 Formula one races of 2018. Read this file and group the results by race
#We will create links to each race in the first 10 rows of the spreadSheet
#The next row will be column labels
#After that will come a block for each race.
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Read the data, and decide how much space to leave for the hyperlinks
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv"
$results = Import-Csv -Path $dataPath | Group-Object -Property RACE
$topRow = $lastDataRow = 1 + $results.Count
#Export the first row of the first group (race) with headers.
$path = "$env:TEMP\Results.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
$excel = $results[0].Group[0] | Export-Excel -Path $path -StartRow $TopRow -BoldTopRow -PassThru
#export each group (race) below the last one, without headers, and create a range for each using the group (Race) name
foreach ($r in $results) {
$excel = $R.Group | Export-Excel -ExcelPackage $excel -NoHeader -StartRow ($lastDataRow +1) -RangeName $R.Name -PassThru -AutoSize
$lastDataRow += $R.Group.Count
}
#Create a hyperlink for each property with display text of "RaceNameGP" which links to the range created when the rows were exported a
$results | ForEach-Object {(New-Object -TypeName OfficeOpenXml.ExcelHyperLink -ArgumentList "Sheet1!$($_.Name)" , "$($_.name) GP")} |
Export-Excel -ExcelPackage $excel -AutoSize -Show

View File

@@ -0,0 +1,9 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
# Create example file
$xlFile = "$PSScriptRoot\ImportColumns.xlsx"
Get-Process | Export-Excel -Path $xlFile
# -ImportColumns will also arrange columns
Import-Excel -Path $xlFile -ImportColumns @(1,3,2) -NoHeader -StartRow 1
# Get only pm, npm, cpu, id, processname
Import-Excel -Path $xlFile -ImportColumns @(6,7,12,25,46) | Format-Table -AutoSize

View File

@@ -1,2 +1,4 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Import-Html "http://en.wikipedia.org/wiki/Demographics_of_India" 4

View File

@@ -1 +1,3 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Import-Html "http://www.science.co.il/PTelements.asp" 1

View File

@@ -1 +1,3 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
Import-Html "https://en.wikipedia.org/wiki/List_of_Star_Trek:_The_Original_Series_episodes" 2

View File

@@ -0,0 +1,41 @@
#requires -modules "Get-IndexedItem"
[CmdletBinding()]
Param()
Remove-Item ~\documents\music.xlsx -ErrorAction SilentlyContinue
[System.Diagnostics.Stopwatch]$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
#Query system index for .MP3 files in C:\Users, where album artist is non-blank. Leave sorted table with columns of interest in $Music.
Get-IndexedItem "itemtype='.mp3'","AlbumArtist like '%'" -Recurse C:\Users -OutputVariable Music `
-OrderBy AlbumArtist, AlbumTitle, TrackNumber, Title -NoFiles `
-Property AlbumArtist, AlbumTitle, TrackNumber, Title, Duration, Size, SampleRate
Write-Verbose -Message ("Fetched " + $music.Rows.Count + " rows from index: " + $stopwatch.Elapsed.TotalSeconds)
#Send Table in $Music to Excel, format as a table, point $ws to the Worksheet
$excel = Send-SQLDataToExcel -Path ~\documents\music.xlsx -DataTable $music -WorkSheetname Music -TableName Music -Passthru
Write-Verbose -Message ("Inserted into Excel: " + $stopwatch.Elapsed.TotalSeconds)
$ws = $excel.Music
#Strip "SYSTEM.", "SYSTEM.AUDIO", "SYSTEM.MEDIA", "SYSTEM.MUSIC" from the column headings
#Convert Duration (column 5) from 100ns ticks to days and format as minutes, seconds, decimal
#Format filesize and sample rate nicely
#Autofit the columns.
Set-ExcelRow -Worksheet $ws -Row 1 -Value {($worksheet.cells[$row,$column].value -replace '^SYSTEM\.','') -replace '^MEDIA\.|^AUDIO\.|^MUSIC\.','' }
Set-ExcelColumn -Worksheet $ws -Column 5 -NumberFormat 'mm:ss.0' -StartRow 2 -Value {$worksheet.cells[$row,$column].value / 864000000000 }
Write-Verbose -Message ("Cells Reset: " + $stopwatch.Elapsed.TotalSeconds)
Set-ExcelColumn -Worksheet $ws -Column 6 -NumberFormat '#.#,,"MB"'
Set-ExcelColumn -Worksheet $ws -Column 7 -NumberFormat '0.0,"KHz"'
$ws.Cells[$ws.Dimension].AutoFitColumns()
#Make a Pivot table for sum of space and count of tracks by artist. Sort by artist, apply formatting to space, give it nice titles.
$pt = Add-PivotTable -PassThru -PivotTableName SpaceUsedByMusic -ExcelPackage $excel -SourceWorkSheet $ws `
-PivotRows ALBUMARTIST -PivotData ([ordered]@{"Size"="Sum"; "Duration"="Count"}) -PivotDataToColumn
$pt.RowFields[0].Sort = [OfficeOpenXml.Table.PivotTable.eSortType]::Ascending
$pt.DataFields[0].Format = '#.0,,"MB"'
$pt.DataFields[0].Name = 'Space Used'
$pt.DataFields[1].Name = 'Tracks'
#Save the file, and load it into Excel
$stopwatch.Stop()
Write-Verbose -Message ("Pivot Done: " + $stopwatch.Elapsed.TotalSeconds)
Close-ExcelPackage -show $excel

View File

@@ -0,0 +1,26 @@
param(
$PesterTestsPath = "$PSScriptRoot\..\..\..\__tests__\"
)
$xlfile = "$env:Temp\testResults.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
$xlparams = @{
Path = $xlfile
InputObject = (Invoke-Pester -Script $PesterTestsPath -PassThru).TestResult | Sort-Object describe
WorksheetName = 'FullResults'
IncludePivotTable = $true
PivotRows = 'Describe'
PivotColumns = 'Passed'
PivotData = @{'Passed' = 'Count' }
IncludePivotChart = $true
ChartType = 'BarClustered'
AutoSize = $true
AutoFilter = $true
Activate = $true
}
Export-Excel -Show @xlparams

View File

@@ -0,0 +1,62 @@
<#
.Synopsis
Runs PsScriptAnalyzer against one or more folders and pivots the results to form a report.
.Example
Analyze_this.ps1
Invokes script analyzer on the current directory; creates a file in $env:temp and opens it in Excel
.Example
Analyze_this.ps1 -xlfile ..\mymodule.xlsx -quiet
Invokes script analyzer on the current directory; creates a file in the parent directory but does not open it
.Example
"." , (dir 'C:\Program Files\WindowsPowerShell\Modules\ImportExcel\') | .\examples\ScriptAnalyzer\Analyze_this.ps1
run from a developemnt directory for importExcel it will produce a report for that directory compared against installed versions
this creates the file in the default location and opens it
#>
[CmdletBinding()]
param (
[parameter(ValueFromPipeline = $true)]
$Path = $PWD,
$xlfile = "$env:TEMP\ScriptAnalyzer.xlsx",
$ChartType = 'BarClustered' ,
$PivotColumns = 'Location',
[switch]$Quiet
)
begin {
Remove-Item -Path $xlfile -ErrorAction SilentlyContinue
$xlparams = @{
Path = $xlfile
WorksheetName = 'FullResults'
AutoSize = $true
AutoFilter = $true
Activate = $true
Show = (-not $Quiet)
}
$pivotParams = @{
PivotTableName = 'BreakDown'
PivotData = @{RuleName = 'Count' }
PivotRows = 'Severity', 'RuleName'
PivotColumns = 'Location'
PivotTotals = 'Rows'
}
$dirsToProcess = @()
}
process {
if ($path.fullName) {$dirsToProcess += $path.fullName}
elseif ($path.path) {$dirsToProcess += $path.Path}
else {$dirsToProcess += $path}
}
end {
$pivotParams['-PivotChartDefinition'] = New-ExcelChartDefinition -ChartType $chartType -Column (1 + $dirsToProcess.Count) -Title "Script analysis" -LegendBold
$xlparams['PivotTableDefinition'] = New-PivotTableDefinition @pivotParams
$dirsToProcess | ForEach-Object {
$dirName = (Resolve-Path -Path $_) -replace "^.*\\(.*?)\\(.*?)$", '$1-$2'
Write-Progress -Activity "Running Script Analyzer" -CurrentOperation $dirName
Invoke-ScriptAnalyzer -Path $_ -ErrorAction SilentlyContinue |
Add-Member -MemberType NoteProperty -Name Location -Value $dirName -PassThru
} | Export-Excel @xlparams
Write-Progress -Activity "Running Script Analyzer" -Completed
}

View File

@@ -0,0 +1,14 @@
try { Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 } catch { throw ; return }
$queries =
'select * from [sheet1$A:A]',
'select * from [sheet1$]',
'select * from [sheet1$A2:E11]',
'select F2,F5 from [sheet1$A2:E11]',
'select * from [sheet1$A2:E11] where F2 = "Grocery"',
'select F2 as [Category], F5 as [Discount], F5*2 as [DiscountPlus] from [sheet1$A2:E11]'
foreach ($query in $queries) {
"query: $($query)"
Invoke-ExcelQuery .\testOleDb.xlsx $query | Format-Table
}

Binary file not shown.

View File

@@ -0,0 +1,6 @@
"Region","Item","UnitSold","UnitCost"
"East","Banana","38","0.26"
"East","Kale","71","0.69"
"East","Apple","35","0.55"
"East","Potato","48","0.48"
"East","Kale","41","0.74"
1 Region Item UnitSold UnitCost
2 East Banana 38 0.26
3 East Kale 71 0.69
4 East Apple 35 0.55
5 East Potato 48 0.48
6 East Kale 41 0.74

View File

@@ -0,0 +1,46 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Create simple pages for 3 stores with product ID, Product Name, quanity price and total
@"
ID,Product,Quantity,Price,Total
12001,Nails,37,3.99,147.63
12002,Hammer,5,12.10,60.5
12003,Saw,12,15.37,184.44
12010,Drill,20,8,160
12011,Crowbar,7,23.48,164.36
"@ | ConvertFrom-Csv| Export-Excel -Path $xlSourcefile -WorkSheetname Oxford
@"
ID,Product,Quantity,Price,Total
12001,Nails,53,3.99,211.47
12002,Hammer,6,12.10,72.60
12003,Saw,10,15.37,153.70
12010,Drill,10,8,80
12012,Pliers,2,14.99,29.98
"@ | ConvertFrom-Csv| Export-Excel -Path $xlSourcefile -WorkSheetname Abingdon
@"
ID,Product,Quantity,Price,Total
12001,Nails,20,3.99,79.80
12002,Hammer,2,12.10,24.20
12010,Drill,11,8,88
12012,Pliers,3,14.99,44.97
"@ | ConvertFrom-Csv| Export-Excel -Path $xlSourcefile -WorkSheetname Banbury
#define a pivot table with a chart to show a sales by store, broken down by product
$ptdef = New-PivotTableDefinition -PivotTableName "Summary" -PivotRows "Store" -PivotColumns "Product" -PivotData @{"Total"="SUM"} -IncludePivotChart -ChartTitle "Sales Breakdown" -ChartType ColumnStacked -ChartColumn 10
#Join the 3 worksheets.
#Name the combined page "Total" and Name the column with the sheet names "store" (as the sheets 'Oxford','Abingdon' and 'Banbury' are the names of the stores
#Format the data as a table named "Summary", using the style "Light1", put the column headers in bold
#Put in a title and freeze to top of the sheet including title and colmun headings
#Add the Pivot table.
#Show the result
Join-Worksheet -Path $xlSourcefile -WorkSheetName "Total" -Clearsheet -FromLabel "Store" -TableName "Combined" -TableStyle Light1 -AutoSize -BoldTopRow -FreezePane 2,1 -Title "Store Sales Summary" -TitleBold -TitleSize 14 -PivotTableDefinition $ptdef -show

View File

@@ -0,0 +1,17 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
#Export disk volume, and Network adapter to their own sheets.
Get-CimInstance -ClassName Win32_LogicalDisk |
Select-Object -Property DeviceId,VolumeName, Size,Freespace |
Export-Excel -Path $xlSourcefile -WorkSheetname Volumes -NumberFormat "0,000"
Get-NetAdapter |
Select-Object -Property Name,InterfaceDescription,MacAddress,LinkSpeed |
Export-Excel -Path $xlSourcefile -WorkSheetname NetAdapters
#Create a summary page with a title of Summary, label the blocks with the name of the sheet they came from and hide the source sheets
Join-Worksheet -Path $xlSourcefile -HideSource -WorkSheetName Summary -NoHeader -LabelBlocks -AutoSize -Title "Summary" -TitleBold -TitleSize 22 -show

View File

@@ -0,0 +1,24 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$params = @{
AutoSize = $true
AutoFilter = $true
AutoNameRange = $true
ExcelChartDefinition = New-ExcelChartDefinition -XRange Item -YRange UnitSold -Title 'Units Sold'
Path = $xlSourcefile
}
#Import 4 sets of sales data from 4 CSV files, using the parameters above.
Import-Csv $PSScriptRoot\NorthSales.csv | Export-Excel -WorkSheetname North @params
Import-Csv $PSScriptRoot\EastSales.csv | Export-Excel -WorkSheetname East @params
Import-Csv $PSScriptRoot\SouthSales.csv | Export-Excel -WorkSheetname South @params
Import-Csv $PSScriptRoot\WestSales.csv | Export-Excel -WorkSheetname West @params
#Join the 4 worksheets together on a sheet named Allsales, use the same parameters, except for AutoNameRange and ExcelChartDefinition.
$params.Remove("AutoNameRange")
$params.Remove("ExcelChartDefinition")
Join-Worksheet -WorkSheetName AllSales -Show @params

View File

@@ -0,0 +1,5 @@
"Region","Item","UnitSold","UnitCost"
"North","Apple","40","0.68"
"North","Kale","55","0.35"
"North","Banana","33","0.31"
"North","Pear","29","0.74"
1 Region Item UnitSold UnitCost
2 North Apple 40 0.68
3 North Kale 55 0.35
4 North Banana 33 0.31
5 North Pear 29 0.74

View File

@@ -0,0 +1,6 @@
"Region","Item","UnitSold","UnitCost"
"South","Banana","54","0.46"
"South","Pear","39","0.44"
"South","Potato","33","0.46"
"South","Banana","49","0.31"
"South","Apple","38","0.59"
1 Region Item UnitSold UnitCost
2 South Banana 54 0.46
3 South Pear 39 0.44
4 South Potato 33 0.46
5 South Banana 49 0.31
6 South Apple 38 0.59

View File

@@ -0,0 +1,12 @@
"Region","Item","UnitSold","UnitCost"
"West","Banana","74","0.56"
"West","Apple","26","0.7"
"West","Banana","59","0.49"
"West","Potato","56","0.62"
"West","Banana","60","0.64"
"West","Pear","32","0.29"
"West","Apple","73","0.26"
"West","Banana","49","0.59"
"West","Pear","65","0.35"
"West","Apple","60","0.34"
"West","Kale","67","0.38"
1 Region Item UnitSold UnitCost
2 West Banana 74 0.56
3 West Apple 26 0.7
4 West Banana 59 0.49
5 West Potato 56 0.62
6 West Banana 60 0.64
7 West Pear 32 0.29
8 West Apple 73 0.26
9 West Banana 49 0.59
10 West Pear 65 0.35
11 West Apple 60 0.34
12 West Kale 67 0.38

View File

@@ -1,4 +1,6 @@
ColumnChart -Title "Central Limit Theorem" -NoLegend ($(
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
ColumnChart -Title "Central Limit Theorem" -NoLegend ($(
for ($i = 1; $i -le 500; $i++) {
$s = 0
for ($j = 1; $j -le 100; $j++) {

View File

@@ -2,5 +2,7 @@
# Sum up handles by company
# Show the Pie Chart
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
PieChart -Title "Total Handles by Company" `
(Invoke-Sum (Get-Process|Where company) company handles)
(Invoke-Sum (Get-Process | Where-Object company) company handles)

Some files were not shown because too many files have changed in this diff Show More