mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-06 00:23:20 +00:00
Compare commits
515 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1f41012a1 | ||
|
|
0fbe9dbc9b | ||
|
|
e0b2d15c53 | ||
|
|
34c924ae19 | ||
|
|
9217962306 | ||
|
|
56acf56430 | ||
|
|
ef9be471ab | ||
|
|
9db2bc068e | ||
|
|
9560ea83f9 | ||
|
|
9c79ba573c | ||
|
|
894e645a47 | ||
|
|
f3dc390bfa | ||
|
|
f0f58f84a0 | ||
|
|
7ded24d2f9 | ||
|
|
cf964e3e4f | ||
|
|
8c5b3b2f5f | ||
|
|
8409adeeba | ||
|
|
153d4d8c45 | ||
|
|
69f9ba7d17 | ||
|
|
e4deb5801e | ||
|
|
1a74c0f0d0 | ||
|
|
72e44da219 | ||
|
|
bef2f29651 | ||
|
|
787dda70ee | ||
|
|
285e9e4949 | ||
|
|
01e3ea206d | ||
|
|
6f3420d11e | ||
|
|
2981bf23b1 | ||
|
|
c5cc018eb5 | ||
|
|
268d48ce3d | ||
|
|
eca631670c | ||
|
|
284560e109 | ||
|
|
234615dfdb | ||
|
|
d31cd04781 | ||
|
|
77481f2901 | ||
|
|
54fec69f88 | ||
|
|
1dc9a02d7d | ||
|
|
f86fdbab22 | ||
|
|
66937db040 | ||
|
|
80520299aa | ||
|
|
2753a6876a | ||
|
|
ade442b18c | ||
|
|
45ba112f73 | ||
|
|
e1fe36699b | ||
|
|
b3f4b188da | ||
|
|
0ce75794e6 | ||
|
|
3afe2059e5 | ||
|
|
66b7b64779 | ||
|
|
d90cd6d2d0 | ||
|
|
1d1f266fb6 | ||
|
|
4945b4d6e3 | ||
|
|
21b5a11aca | ||
|
|
d1976bf3a9 | ||
|
|
ffcdd39ae9 | ||
|
|
b4b5e75d28 | ||
|
|
4c3eb792d6 | ||
|
|
c4ef920bdf | ||
|
|
d81c2055e9 | ||
|
|
4528f3b052 | ||
|
|
5acec641fe | ||
|
|
04d06ff008 | ||
|
|
1974beef2d | ||
|
|
49f0c97635 | ||
|
|
0710724e2d | ||
|
|
a6438d468a | ||
|
|
ce92461efc | ||
|
|
b3c4a334b5 | ||
|
|
6b2190bfff | ||
|
|
5822ef330e | ||
|
|
d78e3fff98 | ||
|
|
85bd85ee69 | ||
|
|
04e8faaccc | ||
|
|
2c062a4e5d | ||
|
|
80c1a945f0 | ||
|
|
1d5ec26b04 | ||
|
|
860b2724f5 | ||
|
|
c38648a654 | ||
|
|
dcd730a4d1 | ||
|
|
0fdaeb977b | ||
|
|
61173d5e40 | ||
|
|
d26f0c66dd | ||
|
|
fe4fcff444 | ||
|
|
01c58faea8 | ||
|
|
dce2f6d108 | ||
|
|
49afad6977 | ||
|
|
b7add5f9e1 | ||
|
|
c07fc81dfe | ||
|
|
3835ceeebb | ||
|
|
6683bed799 | ||
|
|
20aade4bdd | ||
|
|
b6965e0724 | ||
|
|
9d85c6cb81 | ||
|
|
a17fc95415 | ||
|
|
ecb045274a | ||
|
|
e5c4a715d6 | ||
|
|
e27e98a9eb | ||
|
|
9da8bf8bf7 | ||
|
|
50905c7989 | ||
|
|
91a7c17341 | ||
|
|
3c18af50b9 | ||
|
|
66f5d09ace | ||
|
|
fa64299760 | ||
|
|
c36e5fb582 | ||
|
|
5158addc36 | ||
|
|
bf2e37ac9f | ||
|
|
d22d40cdc2 | ||
|
|
df49e04c6c | ||
|
|
f60ca87358 | ||
|
|
cef95f9ebe | ||
|
|
288071035f | ||
|
|
414d1ac72b | ||
|
|
1c7241774f | ||
|
|
7c773ff915 | ||
|
|
46de6c5934 | ||
|
|
955c737bb7 | ||
|
|
74e5fee161 | ||
|
|
c3331e8f09 | ||
|
|
1951a61699 | ||
|
|
5b29ccd9c2 | ||
|
|
d8bd5a8cb6 | ||
|
|
820722b481 | ||
|
|
08c82977f5 | ||
|
|
a2dd42fc80 | ||
|
|
c1d778ef85 | ||
|
|
7abb5dde89 | ||
|
|
0f15f3e3e5 | ||
|
|
3194bb0ee4 | ||
|
|
b1f716f0d5 | ||
|
|
a8f7a13248 | ||
|
|
d200a2929b | ||
|
|
99e69bd6c0 | ||
|
|
4f0c0d7c28 | ||
|
|
968d5a57b6 | ||
|
|
bdefb45095 | ||
|
|
4297d2ef82 | ||
|
|
a49bdb3abc | ||
|
|
a983ecd765 | ||
|
|
5a7d84e624 | ||
|
|
e0f5d9f789 | ||
|
|
7d3bcb810c | ||
|
|
8975aa2e95 | ||
|
|
77f30f105b | ||
|
|
972142f727 | ||
|
|
cfd1ac99b2 | ||
|
|
e09c5e5207 | ||
|
|
3ff59907ff | ||
|
|
ef4ac9777b | ||
|
|
65b1f79d53 | ||
|
|
ecad48acb3 | ||
|
|
f47887f7fe | ||
|
|
061ae22bfe | ||
|
|
53b63b3780 | ||
|
|
378a20a094 | ||
|
|
7edf5f8a3a | ||
|
|
6393701a2f | ||
|
|
71c22d647d | ||
|
|
ef656f72b3 | ||
|
|
dfd9b23cd7 | ||
|
|
f94a075f52 | ||
|
|
cea9713129 | ||
|
|
343687c418 | ||
|
|
d4d2b4a856 | ||
|
|
bed52d456d | ||
|
|
31e6eaf59b | ||
|
|
d770646dc7 | ||
|
|
bc65699068 | ||
|
|
ce3fd2021f | ||
|
|
10f670b4e6 | ||
|
|
c49b7b6db0 | ||
|
|
f768634214 | ||
|
|
07342235b9 | ||
|
|
2793ff1c21 | ||
|
|
121346f939 | ||
|
|
dc8a096732 | ||
|
|
c63512e658 | ||
|
|
e46fe6d3e9 | ||
|
|
6ae50c3193 | ||
|
|
ee2378150c | ||
|
|
259c7e8ae6 | ||
|
|
ae30bfe6c3 | ||
|
|
3756cd6ad8 | ||
|
|
1014250e0b | ||
|
|
951364da51 | ||
|
|
c1604fc08a | ||
|
|
5a235e309e | ||
|
|
af77580b5e | ||
|
|
b06a5059c5 | ||
|
|
edab941c44 | ||
|
|
91fb314bca | ||
|
|
d07affcd46 | ||
|
|
2b3228d041 | ||
|
|
34c5177dfc | ||
|
|
f52ba1c50a | ||
|
|
b50cc67bb3 | ||
|
|
42e2b11a88 | ||
|
|
b6509d3f5c | ||
|
|
29503861fb | ||
|
|
196497e3a0 | ||
|
|
d9fe0a31c3 | ||
|
|
26bf4b9a64 | ||
|
|
a0719b22f0 | ||
|
|
42d56ac557 | ||
|
|
9b9c1de8fd | ||
|
|
e3fdbf9fcc | ||
|
|
abb971be88 | ||
|
|
77fb51da8d | ||
|
|
61c73461ca | ||
|
|
00d88eec0e | ||
|
|
d7dc6102e8 | ||
|
|
04fb8717b9 | ||
|
|
b7cc70bb0b | ||
|
|
bc2277cfdd | ||
|
|
d23d7950ab | ||
|
|
ff02988920 | ||
|
|
07f15f417f | ||
|
|
e7099d78ab | ||
|
|
af13cfa1d0 | ||
|
|
2d22894858 | ||
|
|
5082d2120d | ||
|
|
7995503bd3 | ||
|
|
51a32fb23e | ||
|
|
1b8eb35437 | ||
|
|
51c6a98360 | ||
|
|
0e477ae6ef | ||
|
|
dda73a9138 | ||
|
|
cd7790153f | ||
|
|
134dd2e172 | ||
|
|
245bbbd17b | ||
|
|
c9ad507966 | ||
|
|
39ae2d9a53 | ||
|
|
d08fe73a79 | ||
|
|
8c8c852785 | ||
|
|
c2d5d97ffd | ||
|
|
69b5b7f169 | ||
|
|
26f60aac28 | ||
|
|
f3f48c5ffc | ||
|
|
7690494224 | ||
|
|
d1164f2049 | ||
|
|
97156620ec | ||
|
|
e2c5e0b7cf | ||
|
|
ffdb6533de | ||
|
|
32bb371145 | ||
|
|
21ebf6fc73 | ||
|
|
6950463966 | ||
|
|
dfe09612ff | ||
|
|
e5d2051ee8 | ||
|
|
f785fe0566 | ||
|
|
7cdd486c51 | ||
|
|
d5ebfd5db4 | ||
|
|
a9fc4aa613 | ||
|
|
4c4093f4de | ||
|
|
e6b5bf1937 | ||
|
|
50c02cd8f1 | ||
|
|
7de956b343 | ||
|
|
3697d53bdd | ||
|
|
cd1dcde6d0 | ||
|
|
82efbef979 | ||
|
|
87c2ff610d | ||
|
|
2efb2c99f4 | ||
|
|
08155c25f5 | ||
|
|
8579ce0b78 | ||
|
|
a563857bf3 | ||
|
|
e699fba967 | ||
|
|
3988658875 | ||
|
|
90942e4084 | ||
|
|
de72cfe8cd | ||
|
|
bfbba90c44 | ||
|
|
9a81ddeebd | ||
|
|
d3b7bfaa63 | ||
|
|
f18bca69eb | ||
|
|
6734b2bde1 | ||
|
|
75676a810f | ||
|
|
02878e1d4d | ||
|
|
82458edd7c | ||
|
|
73af0b5dc9 | ||
|
|
eec13674dc | ||
|
|
49dd9f20ee | ||
|
|
7563185bd4 | ||
|
|
c5270e9a47 | ||
|
|
6797f22775 | ||
|
|
e5841d76c6 | ||
|
|
fc4b1638da | ||
|
|
df220534d8 | ||
|
|
fb888f239e | ||
|
|
eac352c28a | ||
|
|
e4fbf7e92e | ||
|
|
852575eb02 | ||
|
|
ab9776fce2 | ||
|
|
41eecf2528 | ||
|
|
b722269584 | ||
|
|
e8d60c7040 | ||
|
|
35b722c7eb | ||
|
|
c5265c9f1c | ||
|
|
bd6a5a3faf | ||
|
|
892ba5d73f | ||
|
|
fae040ced1 | ||
|
|
15e176fc2c | ||
|
|
c7a27d69ff | ||
|
|
b641ce915f | ||
|
|
06986df83a | ||
|
|
6c449bd9ce | ||
|
|
b591a4ab18 | ||
|
|
35553baa05 | ||
|
|
a9aeca9550 | ||
|
|
a72d489707 | ||
|
|
512812d774 | ||
|
|
f18bcff4db | ||
|
|
886d185e6f | ||
|
|
d24890cb97 | ||
|
|
c707848eff | ||
|
|
5ed078222c | ||
|
|
d7e4a0ec2f | ||
|
|
cb42bdec15 | ||
|
|
13a09a8a99 | ||
|
|
33cf407c10 | ||
|
|
23e6180e03 | ||
|
|
4227453299 | ||
|
|
a154fb94f4 | ||
|
|
91eabeada1 | ||
|
|
8ef93de26f | ||
|
|
94659d3fc2 | ||
|
|
192a1aef87 | ||
|
|
9f7884f991 | ||
|
|
36fc9501eb | ||
|
|
06c2210951 | ||
|
|
acd66607d3 | ||
|
|
6c24db9593 | ||
|
|
529ee035ec | ||
|
|
42938f68ba | ||
|
|
0b2aaefac5 | ||
|
|
a3693a7faf | ||
|
|
bdea70c2f1 | ||
|
|
036b9352f3 | ||
|
|
54a387913d | ||
|
|
b2a884e7f1 | ||
|
|
050deb3506 | ||
|
|
bb7a132344 | ||
|
|
2812917228 | ||
|
|
8052b56387 | ||
|
|
fa887bbb24 | ||
|
|
62fe9f01ad | ||
|
|
3024217ca5 | ||
|
|
171783cac7 | ||
|
|
f689c84d04 | ||
|
|
3508acb395 | ||
|
|
d74cce91b6 | ||
|
|
f7636b080a | ||
|
|
821864772a | ||
|
|
2a0395965f | ||
|
|
71330f31e5 | ||
|
|
520bb079e5 | ||
|
|
5e7221062d | ||
|
|
bf63c27d0a | ||
|
|
3ce9018d3c | ||
|
|
b026e1b23c | ||
|
|
1b8be2c605 | ||
|
|
a018df09eb | ||
|
|
9b306458e4 | ||
|
|
ab6bc327e8 | ||
|
|
45c96cd37a | ||
|
|
e47e1d99c1 | ||
|
|
f2be21f955 | ||
|
|
711d253d1a | ||
|
|
2a62dc9b45 | ||
|
|
15f1839d29 | ||
|
|
e0f3171bba | ||
|
|
dc9bff8240 | ||
|
|
cd52f3c704 | ||
|
|
7a9fbaedb1 | ||
|
|
4df916c9f5 | ||
|
|
36387c8f1a | ||
|
|
a9ae83b586 | ||
|
|
64f55c8ba4 | ||
|
|
817ed117a8 | ||
|
|
db98f8482d | ||
|
|
767d75d0c5 | ||
|
|
cd9a5c0122 | ||
|
|
0266aab415 | ||
|
|
8b51ac4159 | ||
|
|
a10d59cbec | ||
|
|
4bf1020431 | ||
|
|
8906d7dbf4 | ||
|
|
ba06c4620f | ||
|
|
2683ec985f | ||
|
|
e09f2b5563 | ||
|
|
8e69b66e82 | ||
|
|
b436b61a8f | ||
|
|
39a68e71c4 | ||
|
|
893b2f3214 | ||
|
|
3a4b0267e7 | ||
|
|
2728d21ffb | ||
|
|
3f28fa5ebe | ||
|
|
807990c4ba | ||
|
|
bf8e8ed6bf | ||
|
|
6a53d3ddc9 | ||
|
|
9c628c49be | ||
|
|
152627298a | ||
|
|
b8cc7f163f | ||
|
|
3f1ea599e3 | ||
|
|
5d2520d8e3 | ||
|
|
d99dd3bbae | ||
|
|
1e0720f57b | ||
|
|
61fc2b24b7 | ||
|
|
21108f5136 | ||
|
|
6dd928097c | ||
|
|
8f2dd982c5 | ||
|
|
904145ebae | ||
|
|
47a61f5eb3 | ||
|
|
f703addeb1 | ||
|
|
a022f0ae1b | ||
|
|
cff83eb692 | ||
|
|
f3197fe076 | ||
|
|
a50363e55f | ||
|
|
7c2943baa1 | ||
|
|
1e115d5ede | ||
|
|
ffbc6b46dc | ||
|
|
d082ca207c | ||
|
|
31573ee803 | ||
|
|
9632664c2c | ||
|
|
da7a70752c | ||
|
|
f8884a64fd | ||
|
|
58ab93a6eb | ||
|
|
94d86927ba | ||
|
|
d31a262f37 | ||
|
|
2e8c69ea6b | ||
|
|
9261b49b56 | ||
|
|
bc80134560 | ||
|
|
6dfa5b1aac | ||
|
|
6f921e1a3d | ||
|
|
feb5868952 | ||
|
|
f48e4ad26c | ||
|
|
33d86cb3c9 | ||
|
|
4753568a39 | ||
|
|
af31bab499 | ||
|
|
3d76bec6c4 | ||
|
|
5dd73789a3 | ||
|
|
85a78dad7e | ||
|
|
13652bc4ed | ||
|
|
0540d221e0 | ||
|
|
243ba0bb3c | ||
|
|
b5177de50d | ||
|
|
695c986b78 | ||
|
|
c6dc928e11 | ||
|
|
066ab8f348 | ||
|
|
7dad54f6e9 | ||
|
|
81fc0742f0 | ||
|
|
f33afef2f0 | ||
|
|
97275a99de | ||
|
|
9e01d7fc0b | ||
|
|
593c586a24 | ||
|
|
4b23d8193b | ||
|
|
4408a04619 | ||
|
|
34457d05da | ||
|
|
d5bf0a44b4 | ||
|
|
cbe5c8e347 | ||
|
|
848177c358 | ||
|
|
80224da067 | ||
|
|
a5b9ddc257 | ||
|
|
2f70cd88e8 | ||
|
|
5969bba169 | ||
|
|
7de56c803c | ||
|
|
5e4220bd09 | ||
|
|
e8a3d3f350 | ||
|
|
458a08dab0 | ||
|
|
c598bbc2a5 | ||
|
|
dc4b66fffe | ||
|
|
9b57853881 | ||
|
|
a4169a42f1 | ||
|
|
0862fcdc8c | ||
|
|
28ddd7de13 | ||
|
|
21d9c56854 | ||
|
|
0f9bf07d30 | ||
|
|
1df63e3206 | ||
|
|
360c497bee | ||
|
|
182e4313b3 | ||
|
|
df3702a09c | ||
|
|
4616112aee | ||
|
|
a6f0d621f8 | ||
|
|
0489ac7d4f | ||
|
|
9969a94309 | ||
|
|
6d106fcc33 | ||
|
|
98d7c04b3f | ||
|
|
23b1608671 | ||
|
|
e008f3cc21 | ||
|
|
9b7e068beb | ||
|
|
624a4e4b82 | ||
|
|
93868d4cd3 | ||
|
|
53b35f9285 | ||
|
|
edc8b29859 | ||
|
|
efadf83b6b | ||
|
|
890906ff10 | ||
|
|
bd40cfe829 | ||
|
|
08254b0fe1 | ||
|
|
1834a4967f | ||
|
|
954ed8d736 | ||
|
|
4823424ae3 | ||
|
|
e07fad442a | ||
|
|
a175125990 | ||
|
|
ca92d468cf | ||
|
|
8d6f5521af | ||
|
|
ceb986b408 | ||
|
|
48607e403e | ||
|
|
57c02a466d | ||
|
|
1004d8a9ea | ||
|
|
f5acf88a17 | ||
|
|
85151f8375 | ||
|
|
304a96e955 | ||
|
|
3c027bafdd | ||
|
|
ac04f0025a | ||
|
|
fd2c5dd042 | ||
|
|
51447f9732 | ||
|
|
6966d0d4ef | ||
|
|
2dc50250fc | ||
|
|
8ad38b544e | ||
|
|
06124e12e7 |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -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,4 +60,5 @@ test.xlsx
|
||||
testCCFMT.ps1
|
||||
testHide.ps1
|
||||
ImportExcel.zip
|
||||
*.xlsx
|
||||
.vscode/launch.json
|
||||
|
||||
|
||||
37
.vscode/spellright.dict
vendored
Normal file
37
.vscode/spellright.dict
vendored
Normal 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
|
||||
270
AddConditionalFormatting.ps1
Normal file
270
AddConditionalFormatting.ps1
Normal file
@@ -0,0 +1,270 @@
|
||||
Function Add-ConditionalFormatting {
|
||||
<#
|
||||
.Synopsis
|
||||
Adds conditional formatting to all or part of a worksheet.
|
||||
.Description
|
||||
Conditional formatting allows Excel to:
|
||||
* Mark cells with icons depending on their value
|
||||
* Show a databar whose length indicates the value or a two or three color scale where the color indicates the relative value
|
||||
* Change the color, font, or number format of cells which meet given criteria
|
||||
Add-ConditionalFormatting allows these parameters to be set; for fine tuning of
|
||||
the rules, the -PassThru switch will return the rule so that you can modify
|
||||
things which are specific to that type of rule, example, the values which
|
||||
correspond to each icon in an Icon-Set.
|
||||
.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 "b2: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 ExcelPackage object
|
||||
representing Machines.XLSX is stored in $Excel.The desired worksheet is selected
|
||||
and then columns" B" and "I" are conditionally formatted (excluding the top row)
|
||||
to show red text if they contain "2003" or "Disabled" respectively.
|
||||
A fixed date format is then applied to columns D to G, and the top row is formatted.
|
||||
Finally the workbook is saved and the Excel package object is closed.
|
||||
.Example
|
||||
>
|
||||
$r = Add-ConditionalFormatting -WorkSheet $excel.Workbook.Worksheets[1] -Range "B1:B100" -ThreeIconsSet Flags -Passthru
|
||||
$r.Reverse = $true ; $r.Icon1.Type = "Num"; $r.Icon2.Type = "Num" ; $r.Icon2.value = 100 ; $r.Icon3.type = "Num" ;$r.Icon3.value = 1000
|
||||
|
||||
Again Export-Excel has been called with -PassThru leaving a package object
|
||||
in $Excel. This time B1:B100 has been conditionally formatted with 3 icons,
|
||||
using the "Flags" Icon-Set. Add-ConditionalFormatting does not provide access
|
||||
to every option in the formatting rule, so -PassThru has been used and the
|
||||
rule is modified to apply the flags in reverse order, and transitions
|
||||
between flags are set to 100 and 1000.
|
||||
.Example
|
||||
Add-ConditionalFormatting -WorkSheet $sheet -Range "D2:D1048576" -DataBarColor Red
|
||||
|
||||
This time $sheet holds an ExcelWorkshseet object and databars are added to
|
||||
column D, excluding the top row.
|
||||
.Example
|
||||
Add-ConditionalFormatting -Address $worksheet.cells["FinishPosition"] -RuleType Equal -ConditionValue 1 -ForeGroundColor Purple -Bold -Priority 1 -StopIfTrue
|
||||
|
||||
In this example a named range is used to select the cells where the condition
|
||||
should apply, and instead of specifying a sheet and range within the sheet as
|
||||
separate parameters, the cells where the format should apply are specified
|
||||
directly. If a cell in the "FinishPosition" range is 1, then the text is
|
||||
turned to Bold & Purple. This rule is moved to first in the priority list,
|
||||
and where cells have a value of 1, no other rules will be processed.
|
||||
.Example
|
||||
>
|
||||
$excel = Get-ChildItem | Select-Object -Property Name,Length,LastWriteTime,CreationTime | Export-Excel "$env:temp\test43.xlsx" -PassThru -AutoSize
|
||||
$ws = $excel.Workbook.Worksheets["Sheet1"]
|
||||
$ws.Cells["E1"].Value = "SavedAt"
|
||||
$ws.Cells["F1"].Value = [datetime]::Now
|
||||
$ws.Cells["F1"].Style.Numberformat.Format = (Expand-NumberFormat -NumberFormat 'Date-Time')
|
||||
$lastRow = $ws.Dimension.End.Row
|
||||
|
||||
Add-ConditionalFormatting -WorkSheet $ws -address "A2:A$Lastrow" -RuleType LessThan -ConditionValue "A" -ForeGroundColor Gray
|
||||
Add-ConditionalFormatting -WorkSheet $ws -address "B2:B$Lastrow" -RuleType GreaterThan -ConditionValue 1000000 -NumberFormat '#,###,,.00"M"'
|
||||
Add-ConditionalFormatting -WorkSheet $ws -address "C2:C$Lastrow" -RuleType GreaterThan -ConditionValue "=INT($F$1-7)" -ForeGroundColor Green -StopIfTrue
|
||||
Add-ConditionalFormatting -WorkSheet $ws -address "D2:D$Lastrow" -RuleType Equal -ConditionValue "=C2" -ForeGroundColor Blue -StopIfTrue
|
||||
|
||||
Close-ExcelPackage -Show $excel
|
||||
|
||||
The first few lines of code export a list of file and directory names, sizes
|
||||
and dates to a spreadsheet. It puts the date of the export in cell F1.
|
||||
The first Conditional format changes the color of files and folders that begin
|
||||
with a ".", "_" or anything else which sorts before "A".
|
||||
The second Conditional format changes the Number format of numbers bigger than
|
||||
1 million, for example 1,234,567,890 will dispay as "1,234.57M"
|
||||
The third highlights datestamps of files less than a week old when the export
|
||||
was run; the = is necessary in the condition value otherwise the rule will
|
||||
look for the the text INT($F$1-7), and the cell address for the date is fixed
|
||||
using the standard Excel $ notation.
|
||||
The final Conditional format looks for files which have not changed since they
|
||||
were created. Here the condition value is "=C2". The = sign means C2 is treated
|
||||
as a formula, not literal text. Unlike the file age, we want the cell used to
|
||||
change for each cell where the conditional format applies. The first cell in
|
||||
the conditional format range is D2, which is compared against C2, then D3 is
|
||||
compared against C3 and so on. A common mistake is to include the title row in
|
||||
the range and accidentally apply conditional formatting to it, or to begin the
|
||||
range at row 2 but use row 1 as the starting point for comparisons.
|
||||
.Example
|
||||
Add-ConditionalFormatting $ws.Cells["B:B"] GreaterThan 10000000 -Fore Red -Stop -Pri 1
|
||||
|
||||
This version shows the shortest syntax - the Address, Ruletype, and
|
||||
Conditionvalue can be identified from their position, and ForegroundColor,
|
||||
StopIfTrue and Priority can all be shortend.
|
||||
|
||||
#>
|
||||
Param (
|
||||
#A block of cells to format - you can use a named range with -Address $ws.names[1] or $ws.cells["RangeName"]
|
||||
[Parameter(Mandatory = $true, Position = 0)]
|
||||
[Alias("Range")]
|
||||
$Address ,
|
||||
#The worksheet where the format is to be applied
|
||||
[OfficeOpenXml.ExcelWorksheet]$WorkSheet ,
|
||||
#A standard named-rule - Top / Bottom / Less than / Greater than / Contains etc.
|
||||
[Parameter(Mandatory = $true, ParameterSetName = "NamedRule", Position = 1)]
|
||||
[OfficeOpenXml.ConditionalFormatting.eExcelConditionalFormattingRuleType]$RuleType ,
|
||||
#Text color for matching objects
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[Alias("ForegroundColour")]
|
||||
$ForegroundColor,
|
||||
#Color for databar type charts
|
||||
[Parameter(Mandatory = $true, ParameterSetName = "DataBar")]
|
||||
[Alias("DataBarColour")]
|
||||
$DataBarColor,
|
||||
#One of the three-icon set types (e.g. Traffic Lights)
|
||||
[Parameter(Mandatory = $true, ParameterSetName = "ThreeIconSet")]
|
||||
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting3IconsSetType]$ThreeIconsSet,
|
||||
#A four-icon set name
|
||||
[Parameter(Mandatory = $true, ParameterSetName = "FourIconSet")]
|
||||
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting4IconsSetType]$FourIconsSet,
|
||||
#A five-icon set name
|
||||
[Parameter(Mandatory = $true, ParameterSetName = "FiveIconSet")]
|
||||
[OfficeOpenXml.ConditionalFormatting.eExcelconditionalFormatting5IconsSetType]$FiveIconsSet,
|
||||
#Use the Icon-Set in reverse order, or reverse the orders of Two- & Three-Color Scales
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[Parameter(ParameterSetName = "ThreeIconSet")]
|
||||
[Parameter(ParameterSetName = "FourIconSet")]
|
||||
[Parameter(ParameterSetName = "FiveIconSet")]
|
||||
[switch]$Reverse,
|
||||
#A value for the condition (for example 2000 if the test is 'lessthan 2000'; Formulas should begin with "=" )
|
||||
[Parameter(ParameterSetName = "NamedRule",Position = 2)]
|
||||
$ConditionValue,
|
||||
#A second value for the conditions like "Between X and Y"
|
||||
[Parameter(ParameterSetName = "NamedRule",Position = 3)]
|
||||
$ConditionValue2,
|
||||
#Background color for matching items
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
$BackgroundColor,
|
||||
#Background pattern for matching items
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[OfficeOpenXml.Style.ExcelFillStyle]$BackgroundPattern = [OfficeOpenXml.Style.ExcelFillStyle]::None ,
|
||||
#Secondary color when a background pattern requires it
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
$PatternColor,
|
||||
#Sets the numeric format for matching items
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
$NumberFormat,
|
||||
#Put matching items in bold face
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[switch]$Bold,
|
||||
#Put matching items in italic
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[switch]$Italic,
|
||||
#Underline matching items
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[switch]$Underline,
|
||||
#Strikethrough text of matching items
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[switch]$StrikeThru,
|
||||
#Prevent the processing of subsequent rules
|
||||
[Parameter(ParameterSetName = "NamedRule")]
|
||||
[switch]$StopIfTrue,
|
||||
#Set the sequence for rule processing
|
||||
[int]$Priority,
|
||||
#If specified pass the rule back to the caller to allow additional customization.
|
||||
[switch]$PassThru
|
||||
)
|
||||
|
||||
#Allow conditional formatting to work like Set-ExcelRange (with single ADDRESS parameter), split it to get worksheet and range of cells.
|
||||
If ($Address -is [OfficeOpenXml.Table.ExcelTable]) {
|
||||
$WorkSheet = $Address.Address.Worksheet
|
||||
$Address = $Address.Address.Address
|
||||
}
|
||||
elseif ($Address.Address -and $Address.Worksheet -and -not $WorkSheet) { #Address is a rangebase or similar
|
||||
$WorkSheet = $Address.Worksheet[0]
|
||||
$Address = $Address.Address
|
||||
}
|
||||
elseif ($Address -is [String] -and $WorkSheet -and $WorkSheet.Names[$Address] ) { #Address is the name of a named range.
|
||||
$Address = $WorkSheet.Names[$Address].Address
|
||||
}
|
||||
if (($Address -is [OfficeOpenXml.ExcelRow] -and -not $WorkSheet) -or
|
||||
($Address -is [OfficeOpenXml.ExcelColumn] -and -not $WorkSheet) ){ #EPPLUs Can't get the worksheet object from a row or column object, so bail if that was tried
|
||||
Write-Warning -Message "Add-ConditionalFormatting does not support Row or Column objects as an address; use a worksheet and/or specify 'R:R' or 'C:C' instead. "; return
|
||||
}
|
||||
elseif ($Address -is [OfficeOpenXml.ExcelRow]) { #But if we have a column or row object and a worksheet (I don't know *why*) turn them into a string for the range
|
||||
$Address = "$($Address.Row):$($Address.Row)"
|
||||
}
|
||||
elseif ($Address -is [OfficeOpenXml.ExcelColumn]) {
|
||||
$Address = [OfficeOpenXml.ExcelAddress]::new(1,$address.ColumnMin,1,$address.ColumnMax).Address -replace '1',''
|
||||
if ($Address -notmatch ':') {$Address = "$Address`:$Address"}
|
||||
}
|
||||
if ( $Address -is [string] -and $Address -match "!") {$Address = $Address -replace '^.*!',''}
|
||||
#By this point we should have a worksheet object whose ConditionalFormatting collection we will add to. If not, bail.
|
||||
if (-not $worksheet -or $WorkSheet -isnot [OfficeOpenXml.ExcelWorksheet]) {write-warning "You need to provide a worksheet object." ; return}
|
||||
#region create a rule of the right type
|
||||
if ($RuleType -match 'IconSet$') {Write-warning -Message "You cannot configure a Icon-Set rule in this way; please use -$RuleType <SetName>." ; return}
|
||||
if ($PSBoundParameters.ContainsKey("DataBarColor" ) ) {if ($DataBarColor -is [string]) {$DataBarColor = [System.Drawing.Color]::$DataBarColor }
|
||||
$rule = $WorkSheet.ConditionalFormatting.AddDatabar( $Address , $DataBarColor )
|
||||
}
|
||||
elseif ($PSBoundParameters.ContainsKey("ThreeIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddThreeIconSet($Address , $ThreeIconsSet)}
|
||||
elseif ($PSBoundParameters.ContainsKey("FourIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddFourIconSet( $Address , $FourIconsSet )}
|
||||
elseif ($PSBoundParameters.ContainsKey("FiveIconsSet" ) ) {$rule = $WorkSheet.ConditionalFormatting.AddFiveIconSet( $Address , $FiveIconsSet )}
|
||||
else {$rule = ($WorkSheet.ConditionalFormatting)."Add$RuleType"($Address ) }
|
||||
if ($Reverse) {
|
||||
if ($rule.type -match 'IconSet$' ) {$rule.reverse = $true}
|
||||
elseif ($rule.type -match 'ColorScale$') {$temp =$rule.LowValue.Color ; $rule.LowValue.Color = $rule.HighValue.Color; $rule.HighValue.Color = $temp}
|
||||
else {Write-Warning -Message "-Reverse was ignored because $ruletype does not support it."}
|
||||
}
|
||||
#endregion
|
||||
#region set the rule conditions
|
||||
#for lessThan/GreaterThan/Equal/Between conditions make sure that strings are wrapped in quotes. Formulas should be passed with = which will be stripped.
|
||||
if ($RuleType -match "Than|Equal|Between" ) {
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue" )) {
|
||||
$number = $Null
|
||||
#if the condition type is not a value type, but parses as a number, make it the number
|
||||
if ($ConditionValue -isnot [System.ValueType] -and [Double]::TryParse($ConditionValue, [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number) ) {
|
||||
$ConditionValue = $number
|
||||
} #else if it is not a value type, or a formula, or wrapped in quotes, wrap it in quotes.
|
||||
elseif (($ConditionValue -isnot [System.ValueType])-and ($ConditionValue -notmatch '^=') -and ($ConditionValue -notmatch '^".*"$') ) {
|
||||
$ConditionValue = '"' + $ConditionValue +'"'
|
||||
}
|
||||
}
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue2")) {
|
||||
$number = $Null
|
||||
if ($ConditionValue -isnot [System.ValueType] -and [Double]::TryParse($ConditionValue2, [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number) ) {
|
||||
$ConditionValue2 = $number
|
||||
}
|
||||
elseif (($ConditionValue -isnot [System.ValueType]) -and ($ConditionValue2 -notmatch '^=') -and ($ConditionValue2 -notmatch '^".*"$') ) {
|
||||
$ConditionValue2 = '"' + $ConditionValue2 + '"'
|
||||
}
|
||||
}
|
||||
}
|
||||
#But we don't usually want quotes round containstext | beginswith type rules. Can't be Certain they need to be removed, so warn the user their condition might be wrong
|
||||
if ($RuleType -match "Text|With" -and $ConditionValue -match '^".*"$' ) {
|
||||
Write-Warning -Message "The condition will look for the quotes at the start and end."
|
||||
}
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
|
||||
$RuleType -match "Top|Botom" ) {$rule.Rank = $ConditionValue }
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
|
||||
$RuleType -match "StdDev" ) {$rule.StdDev = $ConditionValue }
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
|
||||
$RuleType -match "Than|Equal|Expression" ) {$rule.Formula = ($ConditionValue -replace '^=','') }
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
|
||||
$RuleType -match "Text|With" ) {$rule.Text = ($ConditionValue -replace '^=','') }
|
||||
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
|
||||
$PSBoundParameters.ContainsKey("ConditionValue2") -and
|
||||
$RuleType -match "Between" ) {
|
||||
$rule.Formula = ($ConditionValue -replace '^=','');
|
||||
$rule.Formula2 = ($ConditionValue2 -replace '^=','')
|
||||
}
|
||||
if ($PSBoundParameters.ContainsKey("StopIfTrue") ) {$rule.StopIfTrue = $StopIfTrue }
|
||||
if ($PSBoundParameters.ContainsKey("Priority") ) {$rule.Priority = $Priority }
|
||||
#endregion
|
||||
#region set the rule format
|
||||
if ($PSBoundParameters.ContainsKey("NumberFormat" ) ) {$rule.Style.NumberFormat.Format = (Expand-NumberFormat $NumberFormat) }
|
||||
if ($Underline ) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::Single }
|
||||
elseif ($PSBoundParameters.ContainsKey("Underline" ) ) {$rule.Style.Font.Underline = [OfficeOpenXml.Style.ExcelUnderLineType]::None }
|
||||
if ($PSBoundParameters.ContainsKey("Bold" ) ) {$rule.Style.Font.Bold = [boolean]$Bold }
|
||||
if ($PSBoundParameters.ContainsKey("Italic" ) ) {$rule.Style.Font.Italic = [boolean]$Italic }
|
||||
if ($PSBoundParameters.ContainsKey("StrikeThru" ) ) {$rule.Style.Font.Strike = [boolean]$StrikeThru }
|
||||
if ($PSBoundParameters.ContainsKey("ForeGroundColor" ) ) {if ($ForeGroundColor -is [string]) {$ForeGroundColor = [System.Drawing.Color]::$ForeGroundColor }
|
||||
$rule.Style.Font.Color.color = $ForeGroundColor }
|
||||
if ($PSBoundParameters.ContainsKey("BackgroundColor" ) ) {if ($BackgroundColor -is [string]) {$BackgroundColor = [System.Drawing.Color]::$BackgroundColor }
|
||||
$rule.Style.Fill.BackgroundColor.color = $BackgroundColor }
|
||||
if ($PSBoundParameters.ContainsKey("BackgroundPattern") ) {$rule.Style.Fill.PatternType = $BackgroundPattern }
|
||||
if ($PSBoundParameters.ContainsKey("PatternColor" ) ) {if ($PatternColor -is [string]) {$PatternColor = [System.Drawing.Color]::$PatternColor }
|
||||
$rule.Style.Fill.PatternColor.color = $PatternColor }
|
||||
#endregion
|
||||
#Allow further tweaking by returning the rule, if passthru specified
|
||||
if ($Passthru) {$rule}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
41
ColorCompletion.ps1
Normal file
41
ColorCompletion.ps1
Normal file
@@ -0,0 +1,41 @@
|
||||
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 Add-ConditionalFormatting -ParameterName PatternColor -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 Join-Worksheet -ParameterName TitleBackgroundColor -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 New-ConditionalText -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName New-ConditionalText -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName New-ConditionalText -ParameterName ConditionalTextColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRange -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRange -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRange -ParameterName BorderColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRange -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelColumn -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelColumn -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelColumn -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRow -ParameterName BackgroundColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRow -ParameterName FontColor -ScriptBlock $Function:ColorCompletion
|
||||
Register-ArgumentCompleter -CommandName Set-ExcelRow -ParameterName PatternColor -ScriptBlock $Function:ColorCompletion
|
||||
|
||||
}
|
||||
74
ConvertExcelToImageFile.ps1
Normal file
74
ConvertExcelToImageFile.ps1
Normal file
@@ -0,0 +1,74 @@
|
||||
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
|
||||
@@ -1,25 +1,25 @@
|
||||
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.
|
||||
.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)
|
||||
|
||||
.EXAMPLE
|
||||
ConvertFrom-ExcelData .\testSQLGen.xlsx {
|
||||
param($propertyNames, $record)
|
||||
|
||||
$reportRecord = @()
|
||||
foreach ($pn in $propertyNames) {
|
||||
$reportRecord += "{0}: {1}" -f $pn, $record.$pn
|
||||
$reportRecord = @()
|
||||
foreach ($pn in $propertyNames) {
|
||||
$reportRecord += "{0}: {1}" -f $pn, $record.$pn
|
||||
}
|
||||
$reportRecord +=""
|
||||
$reportRecord -join "`r`n"
|
||||
}
|
||||
$reportRecord +=""
|
||||
$reportRecord -join "`r`n"
|
||||
}
|
||||
|
||||
First: John
|
||||
Last: Doe
|
||||
The Zip: 12345
|
||||
....
|
||||
First: John
|
||||
Last: Doe
|
||||
The Zip: 12345
|
||||
....
|
||||
#>
|
||||
param(
|
||||
[Alias("FullName")]
|
||||
|
||||
@@ -1,4 +1,75 @@
|
||||
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.
|
||||
If you provide fewr 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.
|
||||
If 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 blank 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);
|
||||
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
$TableName,
|
||||
@@ -8,39 +79,40 @@ function ConvertFrom-ExcelToSQLInsert {
|
||||
$Path,
|
||||
[Alias("Sheet")]
|
||||
$WorkSheetname = 1,
|
||||
[int]$HeaderRow = 1,
|
||||
[Alias('HeaderRow', 'TopRow')]
|
||||
[ValidateRange(1, 9999)]
|
||||
[Int]$StartRow,
|
||||
[string[]]$Header,
|
||||
[switch]$NoHeader,
|
||||
[switch]$DataOnly
|
||||
[switch]$DataOnly,
|
||||
[switch]$ConvertEmptyStringsToNull,
|
||||
[switch]$UseMSSQLSyntax
|
||||
)
|
||||
|
||||
$null = $PSBoundParameters.Remove('TableName')
|
||||
$null = $PSBoundParameters.Remove('ConvertEmptyStringsToNull')
|
||||
$null = $PSBoundParameters.Remove('UseMSSQLSyntax')
|
||||
|
||||
$params = @{} + $PSBoundParameters
|
||||
|
||||
ConvertFrom-ExcelData @params {
|
||||
param($propertyNames, $record)
|
||||
|
||||
$ColumnNames = "'" + ($PropertyNames -join "', '") + "'"
|
||||
$values = foreach ($propertyName in $PropertyNames) { $record.$propertyName }
|
||||
$targetValues = "'" + ($values -join "', '") + "'"
|
||||
if($UseMSSQLSyntax) {
|
||||
$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
|
||||
}
|
||||
# $data = Import-Excel @params
|
||||
|
||||
# $PropertyNames = $data[0].psobject.Properties |
|
||||
# Where-Object {$_.membertype -match 'property'} |
|
||||
# Select-Object -ExpandProperty name
|
||||
|
||||
# $ColumnNames = "'" + ($PropertyNames -join "', '") + "'"
|
||||
|
||||
# foreach ($record in $data) {
|
||||
# $values = $(foreach ($propertyName in $PropertyNames) {
|
||||
# $record.$propertyName
|
||||
# })
|
||||
|
||||
# $targetValues = "'" + ($values -join "', '") + "'"
|
||||
|
||||
# "INSERT INTO {0} ({1}) Values({2});" -f $TableName, $ColumnNames, $targetValues
|
||||
# }
|
||||
}
|
||||
@@ -1,18 +1,21 @@
|
||||
Function ConvertTo-ExcelXlsx {
|
||||
[CmdletBinding()]
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Converts an Excel xls to a xlsx using -ComObject
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
Param
|
||||
(
|
||||
[parameter(Mandatory=$true, ValueFromPipeline)]
|
||||
[parameter(Mandatory = $true, ValueFromPipeline)]
|
||||
[string]$Path,
|
||||
[parameter(Mandatory=$false)]
|
||||
[parameter(Mandatory = $false)]
|
||||
[switch]$Force
|
||||
)
|
||||
Process
|
||||
{
|
||||
if(-Not ($Path | Test-Path) ){
|
||||
throw "File not found"
|
||||
Process {
|
||||
if (-Not ($Path | Test-Path) ) {
|
||||
throw "File not found"
|
||||
}
|
||||
if(-Not ($Path | Test-Path -PathType Leaf) ){
|
||||
if (-Not ($Path | Test-Path -PathType Leaf) ) {
|
||||
throw "Folder paths are not allowed"
|
||||
}
|
||||
|
||||
@@ -20,26 +23,29 @@ Function ConvertTo-ExcelXlsx {
|
||||
$xlsFile = Get-Item -Path $Path
|
||||
$xlsxPath = "{0}x" -f $xlsFile.FullName
|
||||
|
||||
if($xlsFile.Extension -ne ".xls"){
|
||||
if ($xlsFile.Extension -ne ".xls") {
|
||||
throw "Expected .xls extension"
|
||||
}
|
||||
|
||||
if(Test-Path -Path $xlsxPath){
|
||||
if($Force){
|
||||
if (Test-Path -Path $xlsxPath) {
|
||||
if ($Force) {
|
||||
try {
|
||||
Remove-Item $xlsxPath -Force
|
||||
} catch {
|
||||
}
|
||||
catch {
|
||||
throw "{0} already exists and cannot be removed. The file may be locked by another application." -f $xlsxPath
|
||||
}
|
||||
Write-Verbose $("Removed {0}" -f $xlsxPath)
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
throw "{0} already exists!" -f $xlsxPath
|
||||
}
|
||||
}
|
||||
|
||||
try{
|
||||
try {
|
||||
$Excel = New-Object -ComObject "Excel.Application"
|
||||
} catch {
|
||||
}
|
||||
catch {
|
||||
throw "Could not create Excel.Application ComObject. Please verify that Excel is installed."
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,110 @@
|
||||
function Copy-ExcelWorkSheet {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Copies a worksheet between workbooks or within the same workbook.
|
||||
.DESCRIPTION
|
||||
Copy-ExcelWorkSheet takes Source and Destination workbook parameters; each can be the path to an XLSx file, an ExcelPackage object or an ExcelWorkbook object.
|
||||
The Source worksheet is specified by name or number (starting from 1), and the destination worksheet can be explicitly named,
|
||||
or will follow the name of the source if no name is specified.
|
||||
.EXAMPLE
|
||||
C:\> Copy-ExcelWorkSheet -SourceWorkbook Test1.xlsx -DestinationWorkbook Test2.xlsx
|
||||
This is the simplest version of the command: no source worksheet is specified so Copy-ExcelWorksheet uses the first sheet in the workbook
|
||||
No Destination sheet is specified so the new worksheet will be the same as the one which is being copied.
|
||||
.EXAMPLE
|
||||
C:\> Copy-ExcelWorkSheet -SourceWorkbook Server1.xlsx -sourceWorksheet "Settings" -DestinationWorkbook Settings.xlsx -DestinationWorkSheet "Server1"
|
||||
Here the Settings page from Server1's workbook is copied to the 'Server1" page of a "Settings" workbook.
|
||||
.EXAMPLE
|
||||
C:\> $excel = Open-ExcelPackage .\test.xlsx
|
||||
C:\> Copy-ExcelWorkSheet -SourceWorkbook $excel -SourceWorkSheet "first" -DestinationWorkbook $excel -Show -DestinationWorkSheet Duplicate
|
||||
This opens the workbook test.xlsx and copies the worksheet named "first" to a new worksheet named "Duplicate",
|
||||
because -Show is specified the file is saved and opened in Excel
|
||||
.EXAMPLE
|
||||
C:\> $excel = Open-ExcelPackage .\test.xlsx
|
||||
C:\> Copy-ExcelWorkSheet -SourceWorkbook $excel -SourceWorkSheet 1 -DestinationWorkbook $excel -DestinationWorkSheet Duplicate
|
||||
C:\> Close-ExcelPackage $excel
|
||||
This is almost the same as the previous example, except source sheet is specified by position rather than name and
|
||||
because -Show is not specified, so other steps can be carried using the package object, at the end the file is saved by Close-ExcelPackage
|
||||
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
#An ExcelWorkbook or ExcelPackage object or the path to an XLSx file where the data is found.
|
||||
[Parameter(Mandatory=$true)]
|
||||
$SourceWorkbook,
|
||||
[Parameter(Mandatory=$true)]
|
||||
$SourceWorkSheet,
|
||||
#Name or number (starting from 1) of the worksheet in the source workbook (defaults to 1).
|
||||
$SourceWorkSheet = 1 ,
|
||||
#An ExcelWorkbook or ExcelPackage object or the path to an XLSx file where the data should be copied.
|
||||
[Parameter(Mandatory=$true)]
|
||||
$DestinationWorkbook,
|
||||
#Name of the worksheet in the destination workbook; by default the same as the source worksheet's name. If the sheet exists it will be deleted and re-copied.
|
||||
$DestinationWorkSheet,
|
||||
#if the destination is an excel package or a path, launch excel and open the file on completion.
|
||||
[Switch]$Show
|
||||
)
|
||||
|
||||
Write-Verbose "Copying $($SourceWorkSheet) from $($SourceWorkbook) to $($DestinationWorkSheet) in $($DestinationWorkbook)"
|
||||
|
||||
if(!$DestinationWorkSheet) {
|
||||
$DestinationWorkSheet = $SourceWorkSheet
|
||||
#Special case - give the same path for source and destination worksheet
|
||||
if ($SourceWorkbook -is [System.String] -and $SourceWorkbook -eq $DestinationWorkbook) {
|
||||
if (-not $DestinationWorkSheet) {Write-Warning -Message "You must specify a destination worksheet name if copying within the same workbook."; return}
|
||||
else {
|
||||
Write-Verbose -Message "Copying "
|
||||
$excel = Open-ExcelPackage -Path $SourceWorkbook
|
||||
if (-not $excel.Workbook.Worksheets[$Sourceworksheet]) {
|
||||
Write-Warning -Message "Could not find Worksheet $sourceWorksheet in $sourceWorkbook"
|
||||
Close-ExcelPackage -ExcelPackage $excel -NoSave
|
||||
return
|
||||
}
|
||||
elseif ($excel.Workbook.Worksheets[$Sourceworksheet].name -eq $DestinationWorkSheet) {
|
||||
Write-Warning -Message "The destination worksheet name is the same as the source. "
|
||||
Close-ExcelPackage -ExcelPackage $excel -NoSave
|
||||
return
|
||||
}
|
||||
else {
|
||||
$null = Add-WorkSheet -ExcelPackage $Excel -WorkSheetname $DestinationWorkSheet -CopySource ($excel.Workbook.Worksheets[$SourceWorkSheet])
|
||||
Close-ExcelPackage -ExcelPackage $excel -Show:$Show
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($SourceWorkbook -is [OfficeOpenXml.ExcelWorkbook]) {$sourcews=$SourceWorkbook.Worksheets[$SourceWorkSheet]}
|
||||
elseif ($SourceWorkbook -is [OfficeOpenXml.ExcelPackage] ) {$sourcews=$SourceWorkbook.Workbook.Worksheets[$SourceWorkSheet]}
|
||||
else {
|
||||
$SourceWorkbook = (Resolve-Path $SourceWorkbook).ProviderPath
|
||||
try {
|
||||
Write-Verbose "Opening worksheet '$Worksheetname' in Excel workbook '$SourceWorkbook'."
|
||||
$Stream = New-Object -TypeName System.IO.FileStream -ArgumentList $SourceWorkbook, 'Open', 'Read' ,'ReadWrite'
|
||||
$Package1 = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Stream
|
||||
$sourceWs = $Package1.Workbook.Worksheets[$SourceWorkSheet]
|
||||
}
|
||||
catch {Write-Warning -Message "Could not open $SourceWorkbook" ; return}
|
||||
}
|
||||
if (-not $sourceWs) {Write-Warning -Message "Could not find worksheet '$Sourceworksheet' in the source workbook." ; return}
|
||||
else {
|
||||
try {
|
||||
if ($DestinationWorkbook -is [OfficeOpenXml.ExcelWorkbook]) {
|
||||
$wb = $DestinationWorkbook
|
||||
}
|
||||
elseif ($DestinationWorkbook -is [OfficeOpenXml.ExcelPackage] ) {
|
||||
$wb = $DestinationWorkbook.workbook
|
||||
if ($show) {$package2 =$DestinationWorkbook}
|
||||
}
|
||||
else {
|
||||
$package2 = Open-ExcelPackage -Create -Path $DestinationWorkbook
|
||||
$wb = $package2.Workbook
|
||||
}
|
||||
if (-not $DestinationWorkSheet) {$DestinationWorkSheet = $SourceWs.Name}
|
||||
if ($wb.Worksheets[$DestinationWorkSheet]) {
|
||||
Write-Verbose "Destination workbook already has a sheet named '$DestinationWorkSheet', deleting it."
|
||||
$wb.Worksheets.Delete($DestinationWorkSheet)
|
||||
}
|
||||
Write-Verbose "Copying $($SourceWorkSheet) from $($SourceWorkbook) to $($DestinationWorkSheet) in $($DestinationWorkbook)"
|
||||
$null = Add-WorkSheet -ExcelWorkbook $wb -WorkSheetname $DestinationWorkSheet -CopySource $sourceWs
|
||||
if ($package1) {Close-ExcelPackage -ExcelPackage $Package1 -NoSave }
|
||||
if ($package2) {Close-ExcelPackage -ExcelPackage $Package2 -Show:$show }
|
||||
if ($show -and $DestinationWorkbook -is [OfficeOpenXml.ExcelWorkbook]) {
|
||||
Write-Warning -Message "-Show only works if the Destination workbook is given as a file path or an ExcelPackage object."
|
||||
}
|
||||
}
|
||||
catch {Write-Warning -Message "Could not write to sheet '$DestinationWorkSheet' in the destination workbook" ; return}
|
||||
}
|
||||
}
|
||||
|
||||
Import-Excel -Path $SourceWorkbook -WorkSheetname $SourceWorkSheet |
|
||||
Export-Excel -Path $DestinationWorkbook -WorkSheetname $DestinationWorkSheet -Show:$Show
|
||||
}
|
||||
28
DoTests.ps1
Normal file
28
DoTests.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
param(
|
||||
[Switch]$DontCreateZip
|
||||
)
|
||||
|
||||
##
|
||||
# Used in Appveyor.yml
|
||||
##
|
||||
|
||||
$PSVersionTable.PSVersion
|
||||
|
||||
## Create the zip before the tests run
|
||||
## Otherwise the EPPlus.dll is in use after the Pester run
|
||||
$ModuleVersion = (Get-Content -Raw .\ImportExcel.psd1) | Invoke-Expression | ForEach-Object ModuleVersion
|
||||
|
||||
if (!$DontCreateZip) {
|
||||
$dest = "ImportExcel-{0}-{1}.zip" -f $ModuleVersion, (Get-Date).ToString("yyyyMMddHHmmss")
|
||||
Compress-Archive -Path . -DestinationPath .\$dest
|
||||
}
|
||||
|
||||
if ($null -eq (Get-Module -ListAvailable pester)) {
|
||||
Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser
|
||||
}
|
||||
|
||||
$result = Invoke-Pester -Script $PSScriptRoot\__tests__ -Verbose -PassThru
|
||||
|
||||
if ($result.FailedCount -gt 0) {
|
||||
throw "$($result.FailedCount) tests failed."
|
||||
}
|
||||
15
Examples/AddWorkSheet/AddMultiWorkSheet.ps1
Normal file
15
Examples/AddWorkSheet/AddMultiWorkSheet.ps1
Normal file
@@ -0,0 +1,15 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlSourcefile = "$env:TEMP\Source.xlsx"
|
||||
write-host "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
|
||||
$TabData1 = 1..5 | Export-Excel $xlSourcefile -WorksheetName 'Tab 1' -AutoSize -AutoFilter
|
||||
|
||||
#Add another tab. Replace the $TabData2 with your data
|
||||
$TabData2 = 1..10 | Export-Excel $xlSourcefile -WorksheetName 'Tab 2' -AutoSize -AutoFilter
|
||||
|
||||
#Add another tab. Replace the $TabData3 with your data
|
||||
$TabData3 = 1..15 | Export-Excel $xlSourcefile -WorksheetName 'Tab 3' -AutoSize -AutoFilter -Show
|
||||
12
Examples/AddWorkSheet/AddWorkSheet.ps1
Normal file
12
Examples/AddWorkSheet/AddWorkSheet.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlSourcefile = "$env:TEMP\Source.xlsx"
|
||||
|
||||
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
|
||||
@@ -1,12 +1,14 @@
|
||||
rm temp.xlsx -ErrorAction Ignore
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$data = invoke-sum (ps) company handles,pm,VirtualMemorySize
|
||||
Remove-Item temp.xlsx -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 temp.xlsx -AutoSize -TableName Processes -ExcelChartDefinition $c -Show
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
rm temp.xlsx -ErrorAction Ignore
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Remove-Item temp.xlsx -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 temp.xlsx -AutoSize -TableName Impressions
|
||||
Export-Excel -path temp.xlsx -worksheetName chartPage -ExcelChartDefinition $c -show
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
rm *.xlsx
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Remove-Item -Path Tools.xlsx
|
||||
|
||||
$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 "Tools.xlsx" -AutoFilter -AutoNameRange -AutoSize -ExcelChartDefinition $c1,$c2,$c3 -Show
|
||||
@@ -1,3 +1,5 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
function plot {
|
||||
param(
|
||||
$f,
|
||||
@@ -7,18 +9,18 @@ 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
|
||||
|
||||
$file = 'C:\temp\plot.xlsx'
|
||||
Remove-Item $file -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 $file -Show -AutoNameRange -LineChart -NoLegend #-ExcelChartDefinition $c
|
||||
}
|
||||
|
||||
function pi {[math]::pi}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
echo Last7Days LastMonth LastWeek NextMonth NextWeek ThisMonth ThisWeek Today Tomorrow Yesterday |
|
||||
% {
|
||||
Foreach-Object {
|
||||
$text = @"
|
||||
`$f = ".\testExport.xlsx"
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
$file = ".\conditionalTextFormatting.xlsx"
|
||||
rm $file -ErrorAction Ignore
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Get-Service |
|
||||
Select Status, Name, DisplayName, ServiceName |
|
||||
$file = "$env:temp\conditionalTextFormatting.xlsx"
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
Get-Service |
|
||||
Select-Object 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
|
||||
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
|
||||
)
|
||||
@@ -1,15 +1,19 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
#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
|
||||
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"
|
||||
$file ="$env:temp\testblanks.xlsx"
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
#use the conditional format definition created above
|
||||
$data | Export-Excel $file -show -ConditionalText $ContainsBlanks
|
||||
32
Examples/ConditionalFormatting/Databar.ps1
Normal file
32
Examples/ConditionalFormatting/Databar.ps1
Normal file
@@ -0,0 +1,32 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$path = "$env:temp\test.xlsx"
|
||||
Remove-Item -Path $path -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 $path -ClearSheet -WorkSheetname "Processes" -PassThru
|
||||
|
||||
$sheet = $excel.Workbook.Worksheets["Processes"]
|
||||
|
||||
#Apply fixed formatting to columns. Set-Format is an Alias for Set-Excel Range, -NFormat is an alias for numberformat
|
||||
$sheet.Column(1) | Set-ExcelRange -Bold -AutoFit
|
||||
$sheet.Column(2) | Set-Format -Width 29 -WrapText
|
||||
$sheet.Column(3) | Set-Format -HorizontalAlignment Right -NFormat "#,###"
|
||||
|
||||
Set-ExcelRange -Range -Address $sheet.Cells["E1:H1048576"] -HorizontalAlignment Right -NFormat "#,###"
|
||||
#Set-Format is an alias for Set-ExcelRange
|
||||
Set-Format -Range $sheet.Column(4) -HorizontalAlignment Right -NFormat "#,##0.0" -Bold
|
||||
#In Set-ExcelRange / Set-Format "-Address" is an alias for "-Range"
|
||||
Set-Format -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-Format -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
|
||||
@@ -1,11 +1,13 @@
|
||||
$f = ".\testExport.xlsx"
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
$f = "$env:TEMP\testExport.xlsx"
|
||||
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
$data = $(
|
||||
|
||||
New-PSItem North 111 (echo Region Amount )
|
||||
New-PSItem East 111
|
||||
New-PSItem East 111
|
||||
New-PSItem West 122
|
||||
New-PSItem South 200
|
||||
|
||||
@@ -14,11 +16,13 @@ $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)
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
rm .\testExport.xlsx -ErrorAction Ignore
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
ps | where Company | select Company, Name, PM, Handles, *mem* |
|
||||
Remove-Item "$env:TEMP\testExport.xlsx" -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 "$env:TEMP\testExport.xlsx" -Show -AutoSize -AutoNameRange `
|
||||
-ConditionalFormat $(
|
||||
New-ConditionalFormattingIconSet -Range "C:C" `
|
||||
-ConditionalFormat ThreeIconSet -IconType Arrows
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
.\GenDates.ps1 |
|
||||
Export-Excel $f -Show -AutoSize -ConditionalText $(
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\testExport.xlsx"
|
||||
|
||||
rm $f -ErrorAction Ignore
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
$data = $(
|
||||
|
||||
New-PSItem North 111 (echo Region Amount )
|
||||
New-PSItem East 11
|
||||
New-PSItem West 12
|
||||
New-PSItem South 1000
|
||||
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)
|
||||
25
Examples/ConditionalFormatting/MonthlyTemperatuesDatabar.ps1
Normal file
25
Examples/ConditionalFormatting/MonthlyTemperatuesDatabar.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Remove-Item -Path .\test.xlsx -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 .\test.xlsx -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
|
||||
@@ -1,16 +1,17 @@
|
||||
ipmo ImportExcel -Force
|
||||
$f = ".\testExport.xlsx"
|
||||
rm $f -ErrorAction Ignore
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
function Get-DateOffset ($days=0) {
|
||||
$f = ".\testExport.xlsx"
|
||||
Remove-Item $f -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) (Get-DateOffset 7)
|
||||
New-PSItem (Get-DateOffset -10) (Get-DateOffset -1)
|
||||
) |
|
||||
|
||||
Export-Excel $f -Show -AutoSize -AutoNameRange -ConditionalText $(
|
||||
New-ConditionalText -Range Start -ConditionalType Yesterday -ConditionalTextColor Red
|
||||
|
||||
22
Examples/ConditionalFormatting/SalesReportWithDatabar.ps1
Normal file
22
Examples/ConditionalFormatting/SalesReportWithDatabar.ps1
Normal file
@@ -0,0 +1,22 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Remove-Item -Path .\test.xlsx -ErrorAction Ignore
|
||||
|
||||
$excel = @"
|
||||
Month,Sales
|
||||
Jan,1277
|
||||
Feb,1003
|
||||
Mar,1105
|
||||
Apr,952
|
||||
May,770
|
||||
Jun,621
|
||||
"@ | ConvertFrom-csv |
|
||||
Export-Excel -Path .\test.xlsx -WorkSheetname Sheet1 -AutoNameRange -PassThru
|
||||
|
||||
$sheet = $excel.Workbook.Worksheets["Sheet1"]
|
||||
Add-ConditionalFormatting -WorkSheet $sheet -Range "B1:B7" -DataBarColor LawnGreen
|
||||
|
||||
Set-Format -Address $sheet.Cells["A8"] -Value "Total"
|
||||
Set-Format -Address $sheet.Cells["B8"] -Formula "=Sum(Sales)"
|
||||
|
||||
Close-ExcelPackage $excel -Show
|
||||
@@ -1,6 +1,4 @@
|
||||
cls
|
||||
|
||||
ipmo ..\..\ImportExcel.psd1 -Force
|
||||
try {ipmo ..\..\ImportExcel.psd1 -Force} catch {}
|
||||
|
||||
$data = $(
|
||||
New-PSItem 100 (echo test testx)
|
||||
@@ -10,8 +8,8 @@ $data = $(
|
||||
New-PSItem 500
|
||||
)
|
||||
|
||||
$file1 = "tryComparison1.xlsx"
|
||||
$file2 = "tryComparison2.xlsx"
|
||||
$file1 = "$env:Temp\tryComparison1.xlsx"
|
||||
$file2 = "$env:Temp\tryComparison2.xlsx"
|
||||
|
||||
rm $file1 -ErrorAction Ignore
|
||||
rm $file2 -ErrorAction Ignore
|
||||
@@ -22,6 +20,6 @@ $data | Export-Excel $file1 -Show -ConditionalText $(
|
||||
)
|
||||
|
||||
$data | Export-Excel $file2 -Show -ConditionalText $(
|
||||
New-ConditionalText -ConditionalType GreaterThanOrEqual 275
|
||||
New-ConditionalText -ConditionalType GreaterThanOrEqual 275
|
||||
New-ConditionalText -ConditionalType LessThanOrEqual 250 -BackgroundColor cyan
|
||||
)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
ConvertFrom-ExcelToSQLInsert People .\testSQLGen.xlsx
|
||||
|
||||
|
||||
Binary file not shown.
72
Examples/CustomReporting/CustomReport.ps1
Normal file
72
Examples/CustomReporting/CustomReport.ps1
Normal file
@@ -0,0 +1,72 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$f = ".\dashboard.xlsx"
|
||||
Remove-Item $f -ErrorAction Ignore
|
||||
|
||||
$data = @"
|
||||
From,To,RDollars,RPercent,MDollars,MPercent,Revenue,Margin
|
||||
Atlanta,New York,3602000,.0809,955000,.09,245,65
|
||||
New York,Washington,4674000,.105,336000,.03,222,16
|
||||
Chicago,New York,4674000,.0804,1536000,.14,550,43
|
||||
New York,Philadelphia,12180000,.1427,-716000,-.07,321,-25
|
||||
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
|
||||
|
||||
$excel = Open-ExcelPackage $f
|
||||
|
||||
$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-Format -Address $sheet1.Cells["E:E"] -NumberFormat "$#,##0" -WrapText -HorizontalAlignment Center
|
||||
Set-Format -Address $sheet1.Cells["F:F"] -NumberFormat "#.#0%" -WrapText -HorizontalAlignment Center
|
||||
|
||||
Set-Format -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) {
|
||||
$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
|
||||
|
||||
$BorderBottom = "Thick"
|
||||
$BorderColor = "Black"
|
||||
|
||||
Set-Format -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-Format -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-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-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
|
||||
|
||||
Close-ExcelPackage $excel -Show
|
||||
6
Examples/ExcelToSQLInsert/DemoSQLInsert.ps1
Normal file
6
Examples/ExcelToSQLInsert/DemoSQLInsert.ps1
Normal file
@@ -0,0 +1,6 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
ConvertFrom-ExcelToSQLInsert -TableName "Movies" -Path ".\Movies.xlsx" -ConvertEmptyStringsToNull
|
||||
''
|
||||
'# UseMSSQLSyntax'
|
||||
ConvertFrom-ExcelToSQLInsert -UseMSSQLSyntax -TableName "Movies" -Path ".\Movies.xlsx" -ConvertEmptyStringsToNull
|
||||
BIN
Examples/ExcelToSQLInsert/Movies.xlsx
Normal file
BIN
Examples/ExcelToSQLInsert/Movies.xlsx
Normal file
Binary file not shown.
@@ -1,15 +1,17 @@
|
||||
param ($fibonacciDigits=10)
|
||||
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$file = "fib.xlsx"
|
||||
rm "fib.xlsx" -ErrorAction Ignore
|
||||
Remove-Item "fib.xlsx" -ErrorAction Ignore
|
||||
|
||||
$(
|
||||
New-PSItem 0
|
||||
New-PSItem 1
|
||||
|
||||
|
||||
(
|
||||
2..$fibonacciDigits |
|
||||
ForEach {
|
||||
ForEach-Object {
|
||||
New-PSItem ('=a{0}+a{1}' -f ($_+1),$_)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlfile = "$env:temp\testFmt.xlsx"
|
||||
|
||||
Get-Process |
|
||||
Select-Object Company,Handles,PM, NPM|
|
||||
Select-Object Company,Handles,PM, NPM|
|
||||
Export-Excel $xlfile -Show -AutoSize -CellStyleSB {
|
||||
param(
|
||||
$workSheet,
|
||||
$totalRows,
|
||||
$lastColumn
|
||||
)
|
||||
|
||||
|
||||
Set-CellStyle $workSheet 1 $LastColumn Solid Cyan
|
||||
|
||||
foreach($row in (2..$totalRows | Where-Object {$_ % 2 -eq 0})) {
|
||||
|
||||
24
Examples/FormatCellStyles/ApplyStyle.ps1
Normal file
24
Examples/FormatCellStyles/ApplyStyle.ps1
Normal file
@@ -0,0 +1,24 @@
|
||||
$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
|
||||
@@ -1,9 +1,14 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlfile = "$env:temp\testFmt.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction Ignore
|
||||
|
||||
$RandomStyle = {
|
||||
param(
|
||||
$workSheet,
|
||||
$totalRows,
|
||||
$lastColumn
|
||||
)
|
||||
)
|
||||
|
||||
2..$totalRows | ForEach-Object{
|
||||
Set-CellStyle $workSheet $_ $LastColumn Solid (Write-Output LightGreen Gray Red|Get-Random)
|
||||
@@ -11,5 +16,5 @@ $RandomStyle = {
|
||||
}
|
||||
|
||||
Get-Process |
|
||||
Select-Object Company,Handles,PM, NPM|
|
||||
Select-Object Company,Handles,PM, NPM|
|
||||
Export-Excel $xlfile -Show -AutoSize -CellStyleSB $RandomStyle
|
||||
|
||||
38
Examples/GenerateData/GenDataForCustomReport.ps1
Normal file
38
Examples/GenerateData/GenDataForCustomReport.ps1
Normal file
@@ -0,0 +1,38 @@
|
||||
if(!(gcm 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}
|
||||
|
||||
$(1..6 | Foreach-Object {
|
||||
|
||||
$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]$f=ig "[sign]##" -CustomData $sign
|
||||
|
||||
#"{0},{1},{2},{3},{4},{5},{6},{7}" -f $from, $to, $a, $b, $c, $d, $e, $f
|
||||
|
||||
[PSCustomObject][Ordered]@{
|
||||
From=$from
|
||||
To=$to
|
||||
RDollars=$a
|
||||
RPercent=$b
|
||||
MDollars=$c
|
||||
MPercent=$d
|
||||
Revenue=$e
|
||||
Margin=$f
|
||||
}
|
||||
} | ConvertTo-Csv -NoTypeInformation) -replace '"','' # | Export-Excel
|
||||
101
Examples/Grouping/First10Races.csv
Normal file
101
Examples/Grouping/First10Races.csv
Normal 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
|
||||
|
10
Examples/Grouping/GroupDate.ps1
Normal file
10
Examples/Grouping/GroupDate.ps1
Normal file
@@ -0,0 +1,10 @@
|
||||
$xlfile = "$env:TEMP\Points.xlsx"
|
||||
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
|
||||
$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 $xlfile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition
|
||||
10
Examples/Grouping/GroupNumeric.ps1
Normal file
10
Examples/Grouping/GroupNumeric.ps1
Normal file
@@ -0,0 +1,10 @@
|
||||
$xlfile = "$env:TEMP\Places.xlsx"
|
||||
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
|
||||
$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 $xlfile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition
|
||||
39
Examples/Grouping/TimestampBucket.ps1
Normal file
39
Examples/Grouping/TimestampBucket.ps1
Normal file
@@ -0,0 +1,39 @@
|
||||
$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}}
|
||||
|
||||
$f = "$env:temp\pivottest.xlsx"
|
||||
Remove-Item $f -ErrorAction SilentlyContinue
|
||||
|
||||
$pivotDefParams = @{
|
||||
PivotTableName = 'Timestamp Buckets'
|
||||
PivotRows = @('Timestamp', 'Tenant')
|
||||
PivotData = @{'Bucket' = 'count'}
|
||||
GroupDateRow = 'TimeStamp'
|
||||
GroupDatePart = @('Hours', 'Minutes')
|
||||
Activate = $true
|
||||
}
|
||||
|
||||
$excelParams = @{
|
||||
PivotTableDefinition = New-PivotTableDefinition @pivotDefParams
|
||||
Path = $f
|
||||
WorkSheetname = "Log Data"
|
||||
AutoSize = $true
|
||||
AutoFilter = $true
|
||||
Show = $true
|
||||
}
|
||||
|
||||
$data | Export-Excel @excelParams
|
||||
101
Examples/HyperLinks/First10Races.csv
Normal file
101
Examples/HyperLinks/First10Races.csv
Normal 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,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 {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
@"
|
||||
site,link
|
||||
google,http://www.google.com
|
||||
stackoverflow,http://stackoverflow.com
|
||||
microsoft,http://microsoft.com
|
||||
"@ | ConvertFrom-Csv | Export-Excel
|
||||
|
||||
27
Examples/HyperLinks/Races.ps1
Normal file
27
Examples/HyperLinks/Races.ps1
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
#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.
|
||||
|
||||
#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
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
|
||||
Import-Html "http://en.wikipedia.org/wiki/Demographics_of_India" 4
|
||||
@@ -1 +1,3 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Import-Html "http://www.science.co.il/PTelements.asp" 1
|
||||
@@ -1 +1,3 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Import-Html "https://en.wikipedia.org/wiki/List_of_Star_Trek:_The_Original_Series_episodes" 2
|
||||
41
Examples/Index - Music.ps1
Normal file
41
Examples/Index - Music.ps1
Normal 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-Column -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
|
||||
6
Examples/JoinWorksheet/EastSales.csv
Normal file
6
Examples/JoinWorksheet/EastSales.csv
Normal 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"
|
||||
|
43
Examples/JoinWorksheet/Join-Worksheet.sample.ps1
Normal file
43
Examples/JoinWorksheet/Join-Worksheet.sample.ps1
Normal file
@@ -0,0 +1,43 @@
|
||||
#Get rid of pre-exisiting sheet
|
||||
$path = "$Env:TEMP\test.xlsx"
|
||||
remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
|
||||
#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 $path -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 $path -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 $path -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 $path -WorkSheetName "Total" -Clearsheet -FromLabel "Store" -TableName "Combined" -TableStyle Light1 -AutoSize -BoldTopRow -FreezePane 2,1 -Title "Store Sales Summary" -TitleBold -TitleSize 14 -PivotTableDefinition $ptdef -show
|
||||
13
Examples/JoinWorksheet/Join-worksheet-blocks.sample.ps1
Normal file
13
Examples/JoinWorksheet/Join-worksheet-blocks.sample.ps1
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
$path = "$env:TEMP\Test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#Export disk volume, and Network adapter to their own sheets.
|
||||
Get-WmiObject -Class win32_logicaldisk |
|
||||
Select-Object -Property DeviceId,VolumeName, Size,Freespace |
|
||||
Export-Excel -Path $path -WorkSheetname Volumes -NumberFormat "0,000"
|
||||
Get-NetAdapter |
|
||||
Select-Object -Property Name,InterfaceDescription,MacAddress,LinkSpeed |
|
||||
Export-Excel -Path $path -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 $path -HideSource -WorkSheetName Summary -NoHeader -LabelBlocks -AutoSize -Title "Summary" -TitleBold -TitleSize 22 -show
|
||||
23
Examples/JoinWorksheet/JoinSalesData.ps1
Normal file
23
Examples/JoinWorksheet/JoinSalesData.ps1
Normal file
@@ -0,0 +1,23 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlfile = "$env:temp\AllSales.xlsx"
|
||||
|
||||
Remove-Item $xlfile -ErrorAction Ignore
|
||||
|
||||
$params = @{
|
||||
AutoSize = $true
|
||||
AutoFilter = $true
|
||||
AutoNameRange = $true
|
||||
ExcelChartDefinition = New-ExcelChartDefinition -XRange Item -YRange UnitSold -Title 'Units Sold'
|
||||
Path = $xlfile
|
||||
}
|
||||
#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
|
||||
5
Examples/JoinWorksheet/NorthSales.csv
Normal file
5
Examples/JoinWorksheet/NorthSales.csv
Normal 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"
|
||||
|
6
Examples/JoinWorksheet/SouthSales.csv
Normal file
6
Examples/JoinWorksheet/SouthSales.csv
Normal 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"
|
||||
|
12
Examples/JoinWorksheet/WestSales.csv
Normal file
12
Examples/JoinWorksheet/WestSales.csv
Normal 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,9 +1,11 @@
|
||||
ColumnChart -Title "Central Limit Theorem" ($(
|
||||
for ($i = 1; $i -le 500; $i++) {
|
||||
$s=0
|
||||
for ($j = 1; $j -le 100; $j++){
|
||||
$s+=Get-Random -Minimum 0 -Maximum 2
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
ColumnChart -Title "Central Limit Theorem" -NoLegend ($(
|
||||
for ($i = 1; $i -le 500; $i++) {
|
||||
$s = 0
|
||||
for ($j = 1; $j -le 100; $j++) {
|
||||
$s += Get-Random -Minimum 0 -Maximum 2
|
||||
}
|
||||
$s
|
||||
}
|
||||
$s
|
||||
}
|
||||
) | Sort | Group | select Count, Name)
|
||||
) | Sort-Object | Group-Object | Select-Object Count, Name)
|
||||
@@ -2,5 +2,7 @@
|
||||
# Sum up handles by company
|
||||
# Show the Pie Chart
|
||||
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
PieChart -Title "Total Handles by Company" `
|
||||
(Invoke-Sum (Get-Process|Where company) company handles)
|
||||
(Invoke-Sum (Get-Process | Where-Object company) company handles)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
# Sum up PM by company
|
||||
# Show the Pie Chart
|
||||
|
||||
PieChart -Title "Total PM by Company" `
|
||||
(Invoke-Sum (Get-Process|Where company) company pm)
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
PieChart -Title "Total PM by Company" `
|
||||
(Invoke-Sum (Get-Process|Where-Object company) company pm)
|
||||
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
BarChart (.\TargetData.ps1) "A BarChart"
|
||||
@@ -1 +1,3 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
ColumnChart (.\TargetData.ps1) "A ColumnChart"
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
PieChart (.\TargetData.ps1) "A PieChart"
|
||||
19
Examples/MergeWorkSheet/MergeCSV.ps1
Normal file
19
Examples/MergeWorkSheet/MergeCSV.ps1
Normal file
@@ -0,0 +1,19 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlFile = "$env:TEMP\mw.xlsx"
|
||||
|
||||
Remove-Item $xlFile -ErrorAction Ignore
|
||||
|
||||
$leftCsv = @"
|
||||
MyProp1,MyProp2,Length
|
||||
a,b,10
|
||||
c,d,20
|
||||
"@ | ConvertFrom-Csv
|
||||
|
||||
$rightCsv = @"
|
||||
MyProp1,MyProp2,Length
|
||||
a,b,10
|
||||
c,d,21
|
||||
"@ | ConvertFrom-Csv
|
||||
|
||||
Merge-Worksheet -OutputFile $xlFile -ReferenceObject $leftCsv -DifferenceObject $rightCsv -Key Length -Show
|
||||
21
Examples/MergeWorkSheet/Merge_2_Servers_Services.ps1
Normal file
21
Examples/MergeWorkSheet/Merge_2_Servers_Services.ps1
Normal file
@@ -0,0 +1,21 @@
|
||||
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\Combined*.xlsx" -ErrorAction SilentlyContinue
|
||||
|
||||
#Get a subset of services into $s and export them
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property *
|
||||
$s | Export-Excel -Path $env:temp\server1.xlsx
|
||||
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s.
|
||||
#Change a row. Add a row. Delete a row. And export the changed $s to a second file.
|
||||
$s[2].DisplayName = "Changed from the orginal" #This will be row 4 in Excel - this should be highlighted as a change
|
||||
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Dummy Service"
|
||||
$d.Name = "Dummy"
|
||||
$s.Insert(3,$d) #This will be row 5 in Excel - this should be highlighted as a new item
|
||||
|
||||
$s.RemoveAt(5) #This will be row 7 in Excel - this should be highlighted as deleted item
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server2.xlsx
|
||||
|
||||
#This use of Merge-worksheet Assumes a default worksheet name, (sheet1) We will check and output Name (the key), DisplayName and StartType and ignore other properties.
|
||||
Merge-Worksheet -Referencefile "$env:temp\server1.xlsx" -Differencefile "$env:temp\Server2.xlsx" -OutputFile "$env:temp\combined1.xlsx" -Property name,displayname,startType -Key name -Show
|
||||
34
Examples/MergeWorkSheet/Merge_3_Servers_Services.ps1
Normal file
34
Examples/MergeWorkSheet/Merge_3_Servers_Services.ps1
Normal file
@@ -0,0 +1,34 @@
|
||||
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\Combined*.xlsx" -ErrorAction SilentlyContinue
|
||||
|
||||
#Get a subset of services into $s and export them
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name,DisplayName,StartType
|
||||
$s | Export-Excel -Path $env:temp\server1.xlsx
|
||||
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s.
|
||||
#Change a row. Add a row. Delete a row. And export the changed $s to a second file.
|
||||
$row4Displayname = $s[2].DisplayName
|
||||
$s[2].DisplayName = "Changed from the orginal" #This will be excel row 4 and Server 2 will show as changed.
|
||||
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Dummy Service"
|
||||
$d.Name = "Dummy"
|
||||
$s.Insert(3,$d) #This will be Excel row 5 and server 2 will show as changed - so will Server 3
|
||||
|
||||
$s.RemoveAt(5) #This will be Excel row 7 and Server 2 will show as missing.
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server2.xlsx
|
||||
|
||||
#Make some more changes to $s and export it to a third file
|
||||
$s[2].displayname = $row4Displayname #Server 3 row 4 will match server 1 so won't be highlighted
|
||||
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Second Service"
|
||||
$d.Name = "Service2"
|
||||
$s.Insert(6,$d) #This will be an extra row in Server 3 at row 8. It will show as missing in Server 2.
|
||||
$s.RemoveAt(8) #This will show as missing in Server 3 at row 11 ()
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server3.xlsx
|
||||
|
||||
#Now bring the three files together.
|
||||
|
||||
Merge-MultipleSheets -Path "$env:temp\server1.xlsx", "$env:temp\Server2.xlsx","$env:temp\Server3.xlsx" -OutputFile "$env:temp\combined3.xlsx" -Property name,displayname,startType -Key name -Show
|
||||
55
Examples/MortgageCalculator/MortgageCalculator.ps1
Normal file
55
Examples/MortgageCalculator/MortgageCalculator.ps1
Normal file
@@ -0,0 +1,55 @@
|
||||
<#
|
||||
Fixed Rate Loan/Mortgage Calculator in Excel
|
||||
#>
|
||||
|
||||
param(
|
||||
$Amount = 400000,
|
||||
$InterestRate = .065,
|
||||
$Term = 30
|
||||
)
|
||||
|
||||
function New-CellData {
|
||||
param(
|
||||
$Range,
|
||||
$Value,
|
||||
$Format
|
||||
)
|
||||
|
||||
$setFormatParams = @{
|
||||
WorkSheet = $ws
|
||||
Range = $Range
|
||||
NumberFormat = $Format
|
||||
}
|
||||
|
||||
if ($Value -is [string] -and $Value.StartsWith('=')) {
|
||||
$setFormatParams.Formula = $Value
|
||||
}
|
||||
else {
|
||||
$setFormatParams.Value = $Value
|
||||
}
|
||||
|
||||
Set-Format @setFormatParams
|
||||
}
|
||||
|
||||
$f = "$PSScriptRoot\mortgage.xlsx"
|
||||
Remove-Item $f -ErrorAction SilentlyContinue
|
||||
|
||||
$pkg = "" | Export-Excel $f -Title 'Fixed Rate Loan Payments' -PassThru -AutoSize
|
||||
$ws = $pkg.Workbook.Worksheets["Sheet1"]
|
||||
|
||||
New-CellData A3 'Amount'
|
||||
New-CellData B3 $Amount '$#,##0'
|
||||
|
||||
New-CellData A4 "Interest Rate"
|
||||
New-CellData B4 $InterestRate 'Percentage'
|
||||
|
||||
New-CellData A5 "Term (Years)"
|
||||
New-CellData B5 $Term
|
||||
|
||||
New-CellData D3 "Monthly Payment"
|
||||
New-CellData F3 "=-PMT(F4, B5*12, B3)" '$#,##0.#0'
|
||||
|
||||
New-CellData D4 "Monthly Rate"
|
||||
New-CellData F4 "=((1+B4)^(1/12))-1" 'Percentage'
|
||||
|
||||
Close-ExcelPackage $pkg -Show
|
||||
9
Examples/MoveSheets/MoveSheets.ps1
Normal file
9
Examples/MoveSheets/MoveSheets.ps1
Normal file
@@ -0,0 +1,9 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlfile = "$env:TEMP\testThis.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction Ignore
|
||||
|
||||
1..10 | Export-Excel $xlfile -WorkSheetname First #'First' will be the only sheet
|
||||
11..20 | Export-Excel $xlfile -WorkSheetname Second -MoveToStart #'Second' is moved before first so the order is 'Second', 'First'
|
||||
21..30 | Export-Excel $xlfile -WorkSheetname Third -MoveBefore First #'Second' is moved before first so the order is 'Second', 'Third', 'First'
|
||||
31..40 | Export-Excel $xlfile -WorkSheetname Fourth -MoveAfter Third -Show #'Fourth' is moved after third so the order is ' 'Second', 'Third', 'Fourth' First'
|
||||
BIN
Examples/MultiplierTable/MultiplierTable.xlsx
Normal file
BIN
Examples/MultiplierTable/MultiplierTable.xlsx
Normal file
Binary file not shown.
@@ -1,3 +1,5 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$header = echo `
|
||||
'Date/Time - Peak Brightness (UT)' `
|
||||
'Latitude (Deg)' `
|
||||
@@ -12,8 +14,8 @@ $header = echo `
|
||||
|
||||
$splat=@{
|
||||
url='http://neo.jpl.nasa.gov/fireballs/'
|
||||
index=5
|
||||
Header=$header
|
||||
index=5
|
||||
Header=$header
|
||||
FirstDataRow=1
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
$file = "disks.xlsx"
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
$file = "$env:TEMP\disks.xlsx"
|
||||
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
$data = $(
|
||||
New-PSItem 100 -100
|
||||
@@ -9,5 +11,5 @@ $data = $(
|
||||
New-PSItem -3.2 -4.1
|
||||
New-PSItem -5.2 6.1
|
||||
)
|
||||
|
||||
#Set the numbers throughout the sheet to format as positive in blue with a + sign, negative in Red with a - sign.
|
||||
$data | Export-Excel -Path $file -Show -AutoSize -NumberFormat "[Blue]+0.#0;[Red]-0.#0"
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
$file = "disks.xlsx"
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
$file = "$env:temp\disks.xlsx"
|
||||
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
$data = $(
|
||||
New-PSItem 100 -100
|
||||
@@ -10,6 +12,5 @@ $data = $(
|
||||
New-PSItem -5.2 6.1
|
||||
New-PSItem 1000 -2000
|
||||
)
|
||||
|
||||
$data | Export-Excel -Path $file -Show -AutoSize -NumberFormat '[Blue]$#,##0.00;[Red]-$#,##0.00'
|
||||
|
||||
#Number format can expand terms like Currency, to the local currency format
|
||||
$data | Export-Excel -Path $file -Show -AutoSize -NumberFormat 'Currency'
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$file = "disks.xlsx"
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
$data = $(
|
||||
New-PSItem 1
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$file = "disks.xlsx"
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
$data = $(
|
||||
New-PSItem 100 -100
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$file = "disks.xlsx"
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
Get-CimInstance win32_logicaldisk -filter "drivetype=3" |
|
||||
Select DeviceID,Volumename,Size,Freespace |
|
||||
Get-CimInstance win32_logicaldisk -filter "drivetype=3" |
|
||||
Select-Object DeviceID,Volumename,Size,Freespace |
|
||||
Export-Excel -Path $file -Show -AutoSize -NumberFormat "0"
|
||||
@@ -1,7 +1,9 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$file = "disks.xlsx"
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
Get-CimInstance win32_logicaldisk -filter "drivetype=3" |
|
||||
Select DeviceID,Volumename,Size,Freespace |
|
||||
Get-CimInstance win32_logicaldisk -filter "drivetype=3" |
|
||||
Select-Object DeviceID,Volumename,Size,Freespace |
|
||||
Export-Excel -Path $file -Show -AutoSize
|
||||
@@ -1,23 +1,29 @@
|
||||
$file = "sales.xlsx"
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm $file -ErrorAction Ignore
|
||||
$file = "$env:Temp\sales.xlsx"
|
||||
|
||||
Remove-Item $file -ErrorAction Ignore
|
||||
|
||||
#Using -Passthru with Export-Excel returns an Excel Package object.
|
||||
$xlPkg = Import-Csv .\sales.csv | Export-Excel $file -PassThru
|
||||
|
||||
$ws = $xlPkg.Workbook.WorkSheets[1]
|
||||
#We add script properties to the package so $xlPkg.Sheet1 is equivalent to $xlPkg.Workbook.WorkSheets["Sheet1"]
|
||||
$ws = $xlPkg.Sheet1
|
||||
|
||||
#We can manipulate the cells ...
|
||||
$ws.Cells["E1"].Value = "TotalSold"
|
||||
$ws.Cells["F1"].Value = "Add 10%"
|
||||
|
||||
2..($ws.Dimension.Rows) |
|
||||
ForEach {
|
||||
#This is for illustration - there are more efficient ways to do this.
|
||||
2..($ws.Dimension.Rows) |
|
||||
ForEach-Object {
|
||||
$ws.Cells["E$_"].Formula = "=C$_+D$_"
|
||||
$ws.Cells["F$_"].Formula = "=E$_+(10%*(C$_+D$_))"
|
||||
}
|
||||
|
||||
$ws.Cells.AutoFitColumns()
|
||||
|
||||
#You can call close-ExcelPackage $xlPkg -show, but here we will do the ssteps explicitly
|
||||
$xlPkg.Save()
|
||||
$xlPkg.Dispose()
|
||||
|
||||
Invoke-Item $file
|
||||
55
Examples/PivotTable/MultiplePivotTables.ps1
Normal file
55
Examples/PivotTable/MultiplePivotTables.ps1
Normal file
@@ -0,0 +1,55 @@
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,Date,Fruit,Sold
|
||||
North,1/1/2017,Pears,50
|
||||
South,1/1/2017,Pears,150
|
||||
East,4/1/2017,Grapes,100
|
||||
West,7/1/2017,Bananas,150
|
||||
South,10/1/2017,Apples,200
|
||||
North,1/1/2018,Pears,100
|
||||
East,4/1/2018,Grapes,200
|
||||
West,7/1/2018,Bananas,300
|
||||
South,10/1/2018,Apples,400
|
||||
"@ | Select-Object -Property Region, @{n = "Date"; e = {[datetime]::ParseExact($_.Date, "M/d/yyyy", (Get-Culture))}}, Fruit, Sold
|
||||
|
||||
$xlfile = "$env:temp\multiplePivotTables.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
|
||||
$excel = $data | Export-Excel $xlfile -PassThru -AutoSize -TableName FruitData
|
||||
|
||||
$pivotTableParams = @{
|
||||
PivotTableName = "ByRegion"
|
||||
Address = $excel.Sheet1.cells["F1"]
|
||||
SourceWorkSheet = $excel.Sheet1
|
||||
PivotRows = echo Region Fruit Date
|
||||
PivotData = @{'sold' = 'sum'}
|
||||
PivotTableStyle = 'Light21'
|
||||
GroupDateRow = "Date"
|
||||
GroupDatePart = echo Years Quarters
|
||||
}
|
||||
|
||||
$pt = Add-PivotTable @pivotTableParams -PassThru
|
||||
#$pt.RowHeaderCaption ="By Region,Fruit,Date"
|
||||
$pt.RowHeaderCaption = "By " + ($pivotTableParams.PivotRows -join ",")
|
||||
|
||||
$pivotTableParams.PivotTableName = "ByFruit"
|
||||
$pivotTableParams.Address = $excel.Sheet1.cells["J1"]
|
||||
$pivotTableParams.PivotRows = echo Fruit Region Date
|
||||
|
||||
$pt = Add-PivotTable @pivotTableParams -PassThru
|
||||
$pt.RowHeaderCaption = "By Fruit,Region"
|
||||
|
||||
$pivotTableParams.PivotTableName = "ByDate"
|
||||
$pivotTableParams.Address = $excel.Sheet1.cells["N1"]
|
||||
$pivotTableParams.PivotRows = echo Date Region Fruit
|
||||
|
||||
$pt = Add-PivotTable @pivotTableParams -PassThru
|
||||
$pt.RowHeaderCaption = "By Date,Region,Fruit"
|
||||
|
||||
$pivotTableParams.PivotTableName = "ByYears"
|
||||
$pivotTableParams.Address = $excel.Sheet1.cells["S1"]
|
||||
$pivotTableParams.GroupDatePart = echo Years
|
||||
|
||||
$pt = Add-PivotTable @pivotTableParams -PassThru
|
||||
$pt.RowHeaderCaption = "By Years,Region"
|
||||
|
||||
Close-ExcelPackage $excel -Show
|
||||
25
Examples/PivotTable/PivotTableWithName.ps1
Normal file
25
Examples/PivotTable/PivotTableWithName.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$ExcelParams = @{
|
||||
Path = "$env:TEMP\test1.xlsx"
|
||||
IncludePivotTable = $true
|
||||
PivotRows = 'Company'
|
||||
PivotTableName = 'MyTable'
|
||||
PivotData = @{'Handles' = 'sum'}
|
||||
Show = $true
|
||||
Activate = $true
|
||||
}
|
||||
Remove-Item $ExcelParams.Path -ErrorAction Ignore
|
||||
Get-Process | Select-Object Company, Handles | Export-Excel @ExcelParams
|
||||
|
||||
<# Builds a pivot table that looks like this:
|
||||
|
||||
Sum of Handles
|
||||
Row Labels Total
|
||||
Adobe Systems Incorporated 3100
|
||||
(blank) 214374
|
||||
Apple Inc. 215
|
||||
etc
|
||||
etc
|
||||
Grand Total 365625
|
||||
#>
|
||||
26
Examples/PivotTable/TableAndPivotTable.ps1
Normal file
26
Examples/PivotTable/TableAndPivotTable.ps1
Normal file
@@ -0,0 +1,26 @@
|
||||
$path = "$Env:TEMP\test.xlsx"
|
||||
remove-item -path $path -ErrorAction SilentlyContinue
|
||||
|
||||
#Export some sales data to Excel, format it as a table and put a data-bar in. For this example we won't create the pivot table during the export
|
||||
$excel = ConvertFrom-Csv @"
|
||||
Product, City, Gross, Net
|
||||
Apple, London , 300, 250
|
||||
Orange, London , 400, 350
|
||||
Banana, London , 300, 200
|
||||
Orange, Paris, 600, 500
|
||||
Banana, Paris, 300, 200
|
||||
Apple, New York, 1200,700
|
||||
"@ | Export-Excel -PassThru -Path $path -TableStyle Medium13 -tablename "RawData" -ConditionalFormat @{Range="C2:C7"; DataBarColor="Green"}
|
||||
|
||||
#Add a pivot table, specify its address to put it on the same sheet, use the data that was just exported set the table style and number format.
|
||||
#Use the "City" for the row names, and "Product" for the columnnames, and sum both the gross and net values for each City/Product combination; add grand totals to rows and columns.
|
||||
# activate the sheet and add a pivot chart (defined in a hash table)
|
||||
Add-PivotTable -Address $excel.Sheet1.Cells["F1"] -SourceWorkSheet $Excel.Sheet1 -SourceRange $Excel.Sheet1.Dimension.Address -PivotTableName "Sales" -PivotTableStyle "Medium12" -PivotNumberFormat "$#,##0.00" `
|
||||
-PivotRows "City" -PivotColumns "Product" -PivotData @{Gross="Sum";Net="Sum"}-PivotTotals "Both" -Activate -PivotChartDefinition @{
|
||||
Title="Gross and net by city and product";
|
||||
ChartType="ColumnClustered";
|
||||
Column=11; Width=500; Height=360;
|
||||
YMajorUnit=500; YMinorUnit=100; YAxisNumberformat="$#,##0"
|
||||
LegendPosition="Bottom"}
|
||||
#Save and open in excel
|
||||
Close-ExcelPackage $excel -Show
|
||||
35
Examples/PivotTableFilters/testPivotFilter.ps1
Normal file
35
Examples/PivotTableFilters/testPivotFilter.ps1
Normal file
@@ -0,0 +1,35 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$xlFile="$env:TEMP\testPivot.xlsx"
|
||||
Remove-Item $xlFile -ErrorAction Ignore
|
||||
|
||||
$data =@"
|
||||
Region,Area,Product,Units,Cost
|
||||
North,A1,Apple,100,.5
|
||||
South,A2,Pear,120,1.5
|
||||
East,A3,Grape,140,2.5
|
||||
West,A4,Banana,160,3.5
|
||||
North,A1,Pear,120,1.5
|
||||
North,A1,Grape,140,2.5
|
||||
"@ | ConvertFrom-Csv
|
||||
|
||||
$data |
|
||||
Export-Excel $xlFile -Show `
|
||||
-AutoSize -AutoFilter `
|
||||
-IncludePivotTable `
|
||||
-PivotRows Product `
|
||||
-PivotData @{"Units"="sum"} -PivotFilter Region, Area -Activate
|
||||
|
||||
<#
|
||||
Creates a Pivot table that looks like
|
||||
Region All^
|
||||
Area All^
|
||||
|
||||
Sum of Units
|
||||
Row Labels Total
|
||||
Apple 100
|
||||
Pear 240
|
||||
Grape 280
|
||||
Banana 160
|
||||
Grand Total 780
|
||||
#>
|
||||
@@ -1,4 +1,6 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$plt = New-Plot
|
||||
$plt.Plot((Get-Range 0 5 .02|%{[math]::Cos(2*[math]::pi*$_)}))
|
||||
$plt.Plot((Get-Range 0 5 .02|Foreach-Object {[math]::Cos(2*[math]::pi*$_)}))
|
||||
$plt.SetChartSize(800,300)
|
||||
$plt.Show()
|
||||
88
Examples/SQL+FillColumns+Pivot/Example.ps1
Normal file
88
Examples/SQL+FillColumns+Pivot/Example.ps1
Normal file
@@ -0,0 +1,88 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$sql = @"
|
||||
SELECT rootfile.baseName , rootfile.extension , Image.fileWidth AS width , image.fileHeight AS height ,
|
||||
metadata.dateDay , metadata.dateMonth , metadata.dateYear , Image.captureTime AS dateTaken,
|
||||
metadata.hasGPS , metadata.GPSLatitude , metadata.GPSLongitude ,
|
||||
metadata.focalLength , metadata.flashFired , metadata.ISOSpeedRating AS ISOSpeed,
|
||||
metadata.Aperture AS apertureValue , metadata.ShutterSpeed AS shutterSpeedValue,
|
||||
Image.bitdepth , image.colorLabels ,
|
||||
Camera.Value AS cameraModel , LensRef.value AS lensModel
|
||||
FROM Adobe_images image
|
||||
JOIN AgLibraryFile rootFile ON rootfile.id_local = image.rootFile
|
||||
JOIN AgharvestedExifMetadata metadata ON image.id_local = metadata.image
|
||||
LEFT JOIN AgInternedExifLens LensRef ON LensRef.id_Local = metadata.lensRef
|
||||
LEFT JOIN AgInternedExifCameraModel Camera ON Camera.id_local = metadata.cameraModelRef
|
||||
"@
|
||||
|
||||
#Sql Statement gets 20 columns of data from Adobe lightroom database
|
||||
#Define a pivot table and chart for total pictures with each lens.
|
||||
|
||||
$pt = @{"LensPivot" = @{ "PivotTableName" = "LensPivot";
|
||||
"SourceWorkSheet" = "Sheet1" ;
|
||||
"PivotRows" = "LensModel" ;
|
||||
"PivotData" = @{"basename" = "Count"} ;
|
||||
"IncludePivotChart" = $true ;
|
||||
"NoLegend" = $true ;
|
||||
"ShowPercent" = $true ;
|
||||
"ChartType" = "Pie" ;
|
||||
"ChartTitle" = "Split by Lens" }
|
||||
}
|
||||
|
||||
#we want to add 3 columns, translate Apperture value and Shutter speed value into familar f/ and seconds notation, and use these and ISO to calculate EV level
|
||||
$Avalue = {"=IF(P$ROW>6.63,TEXT(ROUND(Sqrt(Power(2,O$ROW)),1),`"`"`"f/`"`"0.0`")," +
|
||||
"TEXT(ROUND(Sqrt(Power(2,O$ROW)),1),`"`"`"f/`"`"0.0`"))"}
|
||||
$Svalue = {"=IF(P$ROW>2,TEXT(ROUND(POWER(2,P$ROW),0),`"`"`"1/`"`"0`"`"sec`"`"`"),"+
|
||||
"IF(P$ROW>3.32,TEXT(ROUND(1/POWER(2,P$ROW),2),`"0.0`"`"Sec`"`"`"),"+
|
||||
"TEXT(ROUND(1/POWER(2,P$ROW),2),`"0`"`"Sec`"`"`")))"}
|
||||
$evValue = {"=ROUND(P$Row+O$Row-(LOG(N$Row/100,2)),0)" }
|
||||
|
||||
#remove and recreate the file
|
||||
Remove-Item -Path "~\Documents\temp.xlsx" -ErrorAction SilentlyContinue
|
||||
|
||||
#Open a connection to the ODBC source "LR" (which points to the SQLLite DB for Lightroom), run the SQL query, and drop into Excel - in sheet1, autosizing columns.
|
||||
$e = Send-SQLDataToExcel -Path "~\Documents\temp.xlsx" -WorkSheetname "Sheet1" -Connection "DSN=LR" -SQL $sql -AutoSize -Passthru
|
||||
|
||||
#Add columns, then format them and hide the ones which aren't of interest.
|
||||
Set-Column -Worksheet $e.workbook.Worksheets["sheet1"] -Column 21 -Value $Avalue -Heading "Apperture"
|
||||
Set-Column -Worksheet $e.workbook.Worksheets["sheet1"] -Column 22 -Value $Svalue -Heading "Shutter"
|
||||
Set-Column -Worksheet $e.workbook.Worksheets["sheet1"] -Column 23 -Value $Evvalue -Heading "Ev"
|
||||
Set-Format -Address $e.workbook.Worksheets["sheet1" ].Column(21) -HorizontalAlignment Left -AutoFit
|
||||
Set-Format -Address $e.workbook.Worksheets["sheet1" ].Column(22) -HorizontalAlignment Right -AutoFit
|
||||
@(5,6,7,13,15,16,17,18) | ForEach-Object {
|
||||
Set-Format -Address $e.workbook.Worksheets["sheet1" ].Column($_) -Hidden
|
||||
}
|
||||
|
||||
#Center the column labels.
|
||||
Set-Format -Address $e.workbook.Worksheets["sheet1" ].Row(1) -HorizontalAlignment Center
|
||||
|
||||
#Format the data as a nice Table, Create the pivot table & chart defined above, show the file in Excel in excel after saving.
|
||||
Export-Excel -ExcelPackage $e -WorkSheetname "sheet1" -TableName "Table" -PivotTableDefinition $pt -Show
|
||||
|
||||
############################################################
|
||||
|
||||
Remove-Item .\demo3.xlsx
|
||||
#Database query to get race wins, Poles and fastest lapes for the 25 best drivers; we already have a connection to the DB in $dbSessions
|
||||
$session = $DbSessions["f1"]
|
||||
$SQL = @"
|
||||
SELECT TOP 25 DriverName,
|
||||
Count(RaceDate) AS Races,
|
||||
Count(Win) AS Wins,
|
||||
Count(Pole) AS Poles,
|
||||
Count(FastestLap) AS Fastlaps
|
||||
FROM Results
|
||||
GROUP BY DriverName
|
||||
ORDER BY (Count(win)) DESC
|
||||
"@
|
||||
|
||||
#Run the query and put the results in workshet "Winners", autosize the columns and hold on to the ExcelPackage object
|
||||
$Excel = Send-SQLDataToExcel -SQL $sql -Session $session -path .\demo3.xlsx -WorkSheetname "Winners" -AutoSize -Passthru
|
||||
#Create and format columns for the ratio of Wins to poles and fast laps.
|
||||
Set-Column -ExcelPackage $Excel -WorkSheetname "Winners" -column 6 -Heading "WinsToPoles" -Value {"=D$row/C$row"}
|
||||
Set-Column -ExcelPackage $Excel -WorkSheetname "Winners" -column 7 -Heading "WinsToFast" -Value {"=E$row/C$row"}
|
||||
6..7 | ForEach-Object {
|
||||
Set-Format -Address $Excel.Workbook.Worksheets["Winners"].column($_) -NumberFormat "0.0%" -AutoFit }
|
||||
#Define a chart to show the relationship of lest on an XY Grid, create the ranges required in the, add the chart and show the file in Excel in excel after saving.
|
||||
$chart = New-ExcelChart -NoLegend -ChartType XYScatter -XRange WinsToFast -YRange WinsToPoles -ShowCategory -Column 7 -Width 2000 -Height 700
|
||||
Export-Excel -ExcelPackage $Excel -WorkSheetname "Winners" -AutoNameRange -ExcelChartDefinition $chart -Show
|
||||
|
||||
24
Examples/SQL+FillColumns+Pivot/Example2.ps1
Normal file
24
Examples/SQL+FillColumns+Pivot/Example2.ps1
Normal file
@@ -0,0 +1,24 @@
|
||||
#requires -modules "getSql"
|
||||
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
#download f1Results from https://1drv.ms/f/s!AhfYu7-CJv4egbt5FD7Cdxi8jSz3aQ and update the path below
|
||||
Get-SQL -Session f1 -Excel -Connection C:\Users\mcp\OneDrive\Public\F1\f1Results.xlsx -showtables -Verbose
|
||||
|
||||
Remove-Item .\demo3.xlsx
|
||||
$session = $DbSessions["f1"]
|
||||
|
||||
$SQL = "SELECT top 25 DriverName, Count(RaceDate) as Races ,
|
||||
Count(Win) as Wins, Count(Pole) as Poles, Count(FastestLap) as Fastlaps
|
||||
FROM Results GROUP BY DriverName
|
||||
order by (count(win)) desc"
|
||||
$Excel = Send-SQLDataToExcel -SQL $sql -Session $session -path .\demo3.xlsx -WorkSheetname "Winners" -AutoSize -AutoNameRange -BoldTopRow -FreezeTopRow -Passthru
|
||||
|
||||
$ws = $Excel.Workbook.Worksheets["Winners"]
|
||||
|
||||
Set-Row -Worksheet $ws -Heading "Average" -Value {"=Average($columnName`2:$columnName$endrow)"} -NumberFormat "0.0" -Bold
|
||||
Set-Column -Worksheet $ws -Heading "WinsToPoles" -Value {"=D$row/C$row"} -Column 6 -AutoSize -AutoNameRange
|
||||
Set-Column -Worksheet $ws -Heading "WinsToFast" -Value {"=E$row/C$row"} -Column 7 -AutoSize -AutoNameRange
|
||||
|
||||
Set-Format -WorkSheet $ws -Range "F2:G50" -NumberFormat "0.0%"
|
||||
$chart = New-ExcelChart -NoLegend -ChartType XYScatter -XRange WinsToFast -YRange WinsToPoles -Column 7 -Width 2000 -Height 700 -Title "Poles vs fastlaps"
|
||||
Export-Excel -ExcelPackage $Excel -WorkSheetname "Winners" -ExcelChartDefinition $chart -Show
|
||||
@@ -0,0 +1,13 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$path = "$env:TEMP\testBackgroundColor.xlsx"
|
||||
|
||||
$p = Get-Process | Select-Object Company, Handles | Export-Excel $path -ClearSheet -PassThru
|
||||
|
||||
$ws = $p.Workbook.WorkSheets[1]
|
||||
$totalRows = $ws.Dimension.Rows
|
||||
|
||||
#Set the range from B2 to the last active row. s
|
||||
Set-ExcelRange -Range $ws.Cells["B2:B$($totalRows)"] -BackgroundColor LightBlue
|
||||
|
||||
Export-Excel -ExcelPackage $p -show -AutoSize
|
||||
@@ -1,11 +1,14 @@
|
||||
. ..\New-PSItem.ps1
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm *.xlsx
|
||||
|
||||
#. ..\New-PSItem.ps1
|
||||
|
||||
Remove-Item "$env:temp\functions.xlsx" -ErrorAction SilentlyContinue
|
||||
|
||||
$(
|
||||
New-PSItem 12001 Nails 37 3.99 =C2*D2 (echo ID Product Quantity Price Total)
|
||||
New-PSItem 12002 Hammer 5 12.10 =C3*D3
|
||||
New-PSItem 12003 Saw 12 15.37 =C4*D4
|
||||
New-PSItem 12010 Drill 20 8 =C5*D5
|
||||
New-PSItem 12011 Crowbar 7 23.48 =C6*D6
|
||||
) | Export-Excel functions.xlsx -AutoSize -Show
|
||||
New-PSItem 12011 Crowbar 7 23.48 =C6*D6
|
||||
) | Export-Excel "$env:temp\functions.xlsx"-AutoSize -Show
|
||||
|
||||
14
Examples/SpreadsheetCells/ExcelFormulasUsingAddMember.ps1
Normal file
14
Examples/SpreadsheetCells/ExcelFormulasUsingAddMember.ps1
Normal file
@@ -0,0 +1,14 @@
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Remove-Item .\testFormula.xlsx -ErrorAction Ignore
|
||||
|
||||
@"
|
||||
id,item,units,cost
|
||||
12001,Nails,37,3.99
|
||||
12002,Hammer,5,12.10
|
||||
12003,Saw,12,15.37
|
||||
12010,Drill,20,8
|
||||
12011,Crowbar,7,23.48
|
||||
"@ | ConvertFrom-Csv |
|
||||
Add-Member -PassThru -MemberType NoteProperty -Name Total -Value "=units*cost" |
|
||||
Export-Excel -Path .\testFormula.xlsx -Show -AutoSize -AutoNameRange
|
||||
@@ -1,12 +1,12 @@
|
||||
. ..\New-PSItem.ps1
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm *.xlsx
|
||||
Remove-Item "$env:temp\functions.xlsx" -ErrorAction SilentlyContinue
|
||||
|
||||
$(
|
||||
New-PSItem =2%/12 60 500000 "=pmt(rate,nper,pv)" (echo rate nper pv pmt)
|
||||
New-PSItem =3%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =4%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =5%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =6%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =7%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
) | Export-Excel functions.xlsx -AutoNameRange -AutoSize -Show
|
||||
New-PSItem =3%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =4%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =5%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =6%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
New-PSItem =7%/12 60 500000 "=pmt(rate,nper,pv)"
|
||||
) | Export-Excel "$env:temp\functions.xlsx" -AutoNameRange -AutoSize -Show
|
||||
@@ -1,8 +1,10 @@
|
||||
rm *.xlsx
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
Remove-Item "$env:temp\hyperlink.xlsx" -ErrorAction SilentlyContinue
|
||||
|
||||
$(
|
||||
New-PSItem '=Hyperlink("http://dougfinke.com/blog","Doug Finke")' @("Link")
|
||||
New-PSItem '=Hyperlink("http://blogs.msdn.com/b/powershell/","PowerShell Blog")'
|
||||
New-PSItem '=Hyperlink("http://blogs.technet.com/b/heyscriptingguy/","Hey, Scripting Guy")'
|
||||
|
||||
) | Export-Excel hyperlink.xlsx -AutoSize -Show
|
||||
|
||||
) | Export-Excel "$env:temp\hyperlink.xlsx" -AutoSize -Show
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
<#
|
||||
Revisit I think yahoo deprecated their service
|
||||
#>
|
||||
|
||||
function Get-StockInfo {
|
||||
param(
|
||||
$stock,
|
||||
@@ -7,15 +11,15 @@ function Get-StockInfo {
|
||||
|
||||
Process {
|
||||
|
||||
if(!$endDate) { $endDate = $startDate}
|
||||
if (!$endDate) { $endDate = $startDate}
|
||||
|
||||
$baseUrl = "http://query.yahooapis.com/v1/public/yql?q="
|
||||
$q = @"
|
||||
$baseUrl = "http://query.yahooapis.com/v1/public/yql?q="
|
||||
$q = @"
|
||||
select * from yahoo.finance.historicaldata where symbol = "$($stock)" and startDate = "$($startDate.ToString('yyyy-MM-dd'))" and endDate = "$($endDate.ToString('yyyy-MM-dd'))"
|
||||
"@
|
||||
$suffix = "&env=store://datatables.org/alltableswithkeys&format=json"
|
||||
$r=Invoke-RestMethod ($baseUrl + $q + $suffix)
|
||||
$r.query.results.quote
|
||||
$suffix = "&env=store://datatables.org/alltableswithkeys&format=json"
|
||||
$r = Invoke-RestMethod ($baseUrl + $q + $suffix)
|
||||
$r.query.results.quote
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,20 @@
|
||||
$Symbol = "MSFT"
|
||||
<#
|
||||
Revisit I think yahoo deprecated their service
|
||||
#>
|
||||
|
||||
. .\Get-StockInfo.ps1
|
||||
# try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
rm *.xlsx
|
||||
# $Symbol = "MSFT"
|
||||
|
||||
$chart = New-ExcelChart -XRange Date -YRange Volume `
|
||||
-ChartType ColumnStacked `
|
||||
-Column 9 -Title "$Symbol Volume"
|
||||
# . .\Get-StockInfo.ps1
|
||||
|
||||
Get-StockInfo $Symbol 11/2 11/30 |
|
||||
Export-Excel .\stocks.xlsx -Show `
|
||||
-AutoSize -AutoNameRange `
|
||||
-ExcelChartDefinition $chart
|
||||
# Remove-Item *.xlsx -ErrorAction Ignore
|
||||
|
||||
# $chart = New-ExcelChart -XRange Date -YRange Volume `
|
||||
# -ChartType ColumnStacked `
|
||||
# -Column 9 -Title "$Symbol Volume"
|
||||
|
||||
# Get-StockInfo $Symbol 11/2 11/30 |
|
||||
# Export-Excel .\stocks.xlsx -Show `
|
||||
# -AutoSize -AutoNameRange `
|
||||
# -ExcelChartDefinition $chart
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user