2012年4月27日金曜日

◆Excel無しにExcelファイルを作る2

PowerShell: ◆Excel無しにExcelファイルを作る(サンプル)で基本的なところは分かったのだが、その後色々とExcelファイルを作っていると幾つか不明な部分が出てきて調査したので追記しておく。

<スタイルの指定方法>

書式を指定するためには「スタイル」を指定する必要があるのは前回調べた通りなのだが、独自のスタイルについてはテンプレートファイルで定義しているだけでは使用できない。
シートで予め使用している必要があるようだ。

これはどういう事かというと、まず独自のスタイルを作るには以下の手順となる。

  1. スタイルを展開
    image
  2. 「新しいセルのスタイル」をクリック
    image
  3. 「書式設定」ボタンで好きな書式を設定し「OK」ボタンで登録
    image

以上で、以下の通り独自のスタイルが登録される。
image

後は、PowerShellにて「スタイル1」を設定して行けば良いと思ったのだが残念なことにテンプレートに登録した「スタイル1」はこのままでは使用できない。

予めテンプレート中のシートでこの「スタイル1」を使用している必要があるのだ。

そこで、べたな方法ではあるがさしあたってシート中の適当な場所に「スタイル1」を適用しておき、処理の最後にその場所を「標準」に戻すなんて作業が必要になる。
image

<式の指定方法>

通常Excelの計算式では、相対参照を使っている限りにおいては「式のコピー」について自分でセルのずれなどを意識する必要はない。Excel様が良しなに取り計らってくれる。

しかし(当然の様な気もするが)、「ExcelPackage.dll」を使用している場合、「式のコピー」はあくまでもそのまま機械的なコピーなのでセル参照は自分でずらしていく必要がある。

$formula3 = '=SUM(D{0}:E{0})'

こんな感じで定義しておいて、セルをループしながら処理するときにフォーマット演算子で参照を入れ替えてあげる。

また、ここで設定する式はExcel自体があずかり知らないところで設定される式なのでこのタイミングでは計算が行われない。
単に入力用シートを作るのであれば入力した時に計算は行われるので問題はないが、値を設定しつつ合計は式で計算させてなどと考えると悩ましい感じになってしまう。「Ctrl + Alt + F9」を押して自分で強制的に計算させるかスタートアップマクロで計算させるか・・・。
式をあきらめて自分で計算して合計値も設定するか。

シートの用途次第で検討が必要になりそう。

<DBCS文字列のコピー方法>

どうも日本語への対応が完全ではないようで、日本語の入ったセルをコピーするとご親切にも「振り仮名」まで一緒にコピーされてしまう。

image

仕方がないので力技でカナを削除。

($sheet.Cell($firstRow+$_,$kubunCol).Value) -replace '\p{IsKatakana}+'

コピー元のカラムにもともとカナが入っていたりしたらその時に考える(笑)

2012年4月17日火曜日

◆スケジューリングされたJOBを登録する

V3ではこれまでのJOBにスケジュール機能が追加されるようだ。

スケジュールするには「Register-ScheduledJob」コマンドレットで登録してあげれば良さげ。

いつどのように実行するかといったタスクスケジューラのトリガーに相当する部分は「New-JobTrigger」コマンドレットでトリガーを定義する。

実行されたJOBについてはこれまでのJOBと同様に「Get-Job」とかを使えば良さそう。

001
002
003
004
005
006

$trigger = New-JobTrigger  -At 6:28pm -Once 
Register-ScheduledJob -name テストタスク   -ScriptBlock
{
   
gwmi -class win32_logicaldisk
 `
       
-filter "FreeSpace < 8000000000" > c:\temp\DiskSpace.log
  
   
"test"
} -Credential (Get-Credential) -Trigger $trigger

ログインなしでの実行には「Credential」パラメータで資格情報を設定する必要があるようだ。

スケジュールジョブ関連では以下のコマンド群が追加されている。

image

2012年4月13日金曜日

◆Send-MailMessageにおけるDefaultエンコーディングの使用注意

ヘルプによるとSend-MailMessageで使用できるエンコーディングは以下の通り。

image

さて、どれを使ったものか。

私は通常(評判のよくない?)OUTLOOKを使っているのですがOUTLOOKでさえ「iso-2022-jp」を使っている時に、「iso-2022-jp」以外を使う必要があるという事なんですかね。

これまでは自分あてのメール送信しかしていなかったので特に意味もなく「Default」を使っていた。

「Default」とは何かというと通常の環境では「SJIS」が使われるようだ。

私のOUTLOOKではこれで問題なかったのだが、最近Ccで別の人にも送ったら文字化けするとのお叱りを受けた。

調べてみると、この「Default」指定、確かに本文は「SJIS」のようなのだがヘッダーにこんな指定がされている。

Content-Type: text/plain; charset=iso-2022-jp

これでは、OUTLOOKのようにベストエフォートなメーラーは表示できるが、ThunderBirdのように生真面目なメーラー?では文字化けが発生してしまう。

ん~、どうしたものなんでしょうねぇ。

とりあえずは「UTF8」を指定して回避しているが、以前「UTF8」を使ったSharePointからの通知メールのタイトルがThunderBirdで文字化けした記憶があるので(詳細は失念した)、これが確実なのかは自信がない。

2012年4月10日火曜日

◆デスクトップの表示およびコントロールパネル項目の表示

最近、上司の命を受けSharePointを触っている。
予想通り毎日が悪夢の連続でほとほと呆れ果てる。
なぜに天下のMicrosoftがこのような低品質の製品をリリースし続けるのか不思議で仕方がない。

っと愚痴はさておき、SharePointの不具合回避の一環で「デスクトップ表示」をちょっと調べたのでメモしておく。
なぜにサーバーアプリケーション(WEBアプリケーション)の不具合対策に「デスクトップ表示」が必要なのかといったあたりに悪夢の度合いが伺える(笑)

通常デスクトップ表示は「Windows + D」で簡単に行えるので最悪「SnedKey」すれば何とかなると思っていたのだが、「Windowsキー」を「SendKey」する方法が見当たらない。「Ctrl + Esc」とかで代用できるのかと思ったのだが今一つうまくいかない。
 そこで他の方法を探していたところ以下のような方法を見つけた。

>Start-Process "Shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}"

「ファイル名を指定して実行」で「Shell:favorites」とかやるのと同じイメージかな。

他にも主にコントロールパネル項目に対応したIDが色々とあるようだ。

以下に、それぞれを開いてみるサンプルを作ってみた。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

$IDs = @{
  ActionCenter
="BB64F8A7-BEE7-4E1A-AB8D-7D8273F7FDB6"
  AddNetworkLocation="D4480A50-BA28-11d1-8E75-00C04FA31A86"
  AdministrativeTools="D20EA4E1-3957-11d2-A40B-0C5020524153"
  AdvancedUserAccounts="7A9D77BD-5403-11d2-8785-2E0420524153"
  AutoPlay="9C60DE1E-E5FC-40f4-A487-460851A8D915"
  BackupandRestore="B98A2BEA-7D42-4558-8BD1-832F41BAC6FD"
  BiometricDevices="0142e4d0-fb7a-11dc-ba4a-000ffe7ab428"
  BitLockerDriveEncryption="D9EF8727-CAC2-4e60-809E-86F80A666C91"
  BluetoothDevices="28803F59-3A75-4058-995F-4EE5503B023C"
  Briefcase="85BBD920-42AO-1069-A2E4-08002B30309D"
  ColorManagement="B2C761C6-29BC-4f19-9251-E6195265BAF1"
  Computer="20d04fe0-3aea-1069-a2d8-08002b30309d"
  ConnectTo="38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B"
  ControlPanel_Iconsview="21EC2020-3AEA-1069-A2DD-08002B30309D"
  ControlPanel_AllTasks="ED7BA470-8E54-465E-825C-99712043E01C"
  ControlPanel_Categoryview="26EE0668-A00A-44D7-9371-BEB064C98683"
  CredentialManager="1206F5F1-0569-412C-8FEC-3204630DFB70"
  DateandTime="E2E7934B-DCE5-43C4-9576-7FE4F75E7480"
  DefaultLocation="00C6D95F-329C-409a-81D7-C46C66EA7F33"
  DefaultPrograms="17cd9488-1228-4b2f-88ce-4298e93e0966"
  DesktopGadgets="37efd44d-ef8d-41b1-940d-96973a50e9e0"
  DesktopinFavorites="04731B67-D933-450a-90E6-4ACD2E9408FE"
  DeviceManager="74246bfc-4c96-11d0-abef-0020af6b0b7a"
  DevicesandPrinters="A8A91A66-3A7D-4424-8D24-04E180695C7A"
  Display_DPI="C555438B-3C23-4769-A71F-B6D3D9B6053A"
  EaseofAccessCenter="D555645E-D4F8-4c29-A827-D93C859C4F2A"
  Email_Default="2559a1f5-21d7-11d4-bdaf-00c04f60b9f0"
  Favorites="323CA680-C24D-4099-B94D-446DD2D7249E"
  Flip3D="3080F90E-D7AD-11D9-BD98-0000947B0257"
  FolderOptions="6DFD7C5C-2451-11d3-A299-00C04F8EF6AF"
  FontSettings="93412589-74D4-4E4E-AD0E-E0CB621440FD"
  Fonts="BD84B380-8CA2-1069-AB1D-08000948534"
  Gadgets="37efd44d-ef8d-41b1-940d-96973a50e9e0"
  GameControllers="259EF4B1-E6C9-4176-B574-481532C9BCE8"
  GamesExplorer="ED228FDF-9EA8-4870-83b1-96b02CFE0D52"
  GetPrograms="15eae92e-f17a-4431-9f28-805e482dafd4"
  GettingStarted="CB1B7F8C-C50A-4176-B604-9E24DEE8D4D1"
  HelpandSupport="2559a1f1-21d7-11d4-bdaf-00c04f60b9f0"
  HomeGroup="67CA7650-96E6-4FDD-BB43-A8E774F73A57"
  IndexingOptions="87D66A43-7B11-4A28-9811-C86EE395ACF7"
  Infared="A0275511-0E86-4ECA-97C2-ECD8F1221D08"
  InstalledUpdates="d450a8a1-9568-45c7-9c0e-b4f9fb4537bd"
  InternetOptions="A3DD4F92-658A-410F-84FD-6FBBBEF2FFFE"
  iSCCIInitiator="A304259D-52B8-4526-8B1A-A1D6CECC8243"
  KeyboardProperties="725BE8F7-668E-4C7B-8F90-46BDB0936430"
  Libraries="031E4825-7B94-4dc3-B131-E946B44C8DD5"
  Location="00C6D95F-329C-409a-81D7-C46C66EA7F33"
  LocationandOtherSensors="E9950154-C418-419e-A90A-20C5287AE24B"
  ManageWirelessNetworks="1fa9085f-25a2-489b-85d4-86326eedcd87"
  MobilityCenter="5ea4f148-308c-46d7-98a9-49041b1dd468"
  MouseProperties="6C8EEC18-8D75-41B2-A177-8831D59D2D50"
  MyDocuments="450d8fba-ad25-11d0-98a8-0800361b1103"
  Network="F02C1A0D-BE21-4350-88B0-7367FC96EF3C"
  NetworkandSharingCenter="8E908FC9-BECC-40f6-915B-F4CA0E70D03D"
  NetworkCenterNotificationareapopup="38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B"
  NetworkConnections="7007ACC7-3202-11D1-AAD2-00805FC1270E"
  NetworkMap="E7DE9B1A-7533-4556-9484-B26FB486475E"
  NetworkNeighborhood="208D2C60-3AEA-1069-A2D7-O8002B30309D"
  Network_WorkGroupPlaces="208D2C60-3AEA-1069-A2D7-08002B30309D"
  NotificationAreaIcons="05d7b0f4-2121-4eff-bf6b-ed3f69b894d9"
  OfflineFilesFolder="AFDB1F70-2A4C-11d2-9039-00C04F8EEB3E"
  ParentalControls="96AE8D84-A250-4520-95A5-A47A7E3C548B"
  PenandTouch="F82DF8F7-8B9F-442E-A48C-818EA735FF9B"
  PeopleNearMe="5224F545-A443-4859-BA23-7B5A95BDC8EF"
  PerformanceInformationandTools="78F3955E-3B90-4184-BD14-5397C15F1EFC"
  Personalization="ED834ED6-4B5A-4bfe-8F11-A626DCB6A921"
  PhoneAndModemLocationInformation="40419485-C444-4567-851A-2DD7BFA1684D"
  PowerOptions="025A5937-A6BE-4686-A844-36FE4BEC8B6D"
  Printers="2227A280-3AEA-1069-A2DE-08002B30309D"
  ProgramsandFeatures="7b81be6a-ce2b-4676-a29e-eb907a5126c5"
  Publicfolder="4336a54d-038b-4685-ab02-99bb52d3fb8b"
  RecentPlaces="22877a6d-37a1-461a-91b0-dbda5aaebc99"
  Recovery_SystemRestore="9FE63AFD-59CF-4419-9775-ABCC3849F861"
  RecycleBin="645FF040-5081-101B-9F08-00AA002F954E"
  RegionandLanguage="62d8ed13-c9d0-4ce8-a914-47dd628fb1b0"
  RemoteAppandDesktopConnections="241D7C96-F8BF-4F85-B01F-E2B043341A4B"
  Run="2559a1f3-21d7-11d4-bdaf-00c04f60b9f0"
  Search="2559a1f0-21d7-11d4-bdaf-00c04f60b9f0"
  SetProgramAccessandDefaults="2559a1f7-21d7-11d4-bdaf-00c04f60b9f0"
  ShowDesktop="3080F90D-D7AD-11D9-BD98-0000947B0257"
  Sound="F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D"
  SpeechRecognition="58E3C745-D971-4081-9034-86E34B30836A"
  SyncCenter="9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF"
  System="BB06C0E4-D293-4f75-8A90-CB05B6477EEE"
  TabletPCSettings="80F3F1D5-FECA-45F3-BC32-752C152E456E"
  TaskbarandStartMenu="0DF44EAA-FF21-4412-828E-260A8728E7F1"
  TexttoSpeech="D17D1D6D-CC3F-4815-8FE3-607E7D5D10B3"
  TimeandDate="E2E7934B-DCE5-43C4-9576-7FE4F75E7480"
  Troubleshooting="C58C4893-3BE0-4B45-ABB5-A63E4B8C8651"
  UserAccounts="60632754-c523-4b62-b45c-4172da012619"
  UserFolder="59031a47-3f72-44a7-89c5-5595fe6b30ee"
  UserPinned="1f3427c8-5c10-4210-aa03-2ee45287d668"
  WebBrowser_default="871C5380-42A0-1069-A2EA-08002B30309D"
  WindowsAnytimeUpgrade="BE122A0E-4503-11DA-8BDE-F66BAD1E3F3A"
  WindowsCardspace="78CB147A-98EA-4AA6-B0DF-C8681F69341C"
  WindowsDefender="D8559EB9-20C0-410E-BEDA-7ED416AECC2A"
  WindowsFeatures="67718415-c450-4f3c-bf8a-b487642dc39b"
  WEI="78F3955E-3B90-4184-BD14-5397C15F1EFC"
  WindowsFirewall="4026492F-2F69-46B8-B9BF-5654FC07E423"
  WindowsMobilityCenter="5ea4f148-308c-46d7-98a9-49041b1dd468"
  WindowsSideShow="E95A4861-D57A-4be1-AD0F-35267E261739"
  WindowsUpdate="36eef7db-88ad-4e81-ad49-0e313f0c35f8"
}

Write-Host "表示する:(Y) , しない:(N) , 終了:(Q)" -F Cyan
foreach($key in $IDs.
Keys){
 
Write-Host $key
 
 
$ret = [Console]::ReadKey($true
)
 
if($ret.key -eq "q"){exit
}
 
if($ret.key -eq "y"
){
   
Start-Process "Shell:::{$($IDs[$key])}" 
  }
}
<!--EndFragment