forked from TAo4ma/PS_Script
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Change_Properties_Excel.ps1
196 lines (154 loc) · 5.54 KB
/
Change_Properties_Excel.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# Excelアプリケーションを開始
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
# 指定されたExcelファイルを開く
$workbook = $excel.Workbooks.Open("C:\Users\y0927\Documents\GitHub\PS_Script\新規図面発行通知書_図面一覧表.xls")
# ドキュメントプロパティを取得
$properties = $workbook.BuiltinDocumentProperties
# 新しいシートを追加
$newWorksheet = $workbook.Sheets.Add()
$newWorksheet.Name = "Metadata"
# プロパティの値を保存する配列を作成
$values = @()
# プロパティが存在するか確認し、存在しない場合はデフォルト値を設定
try {
$creationDate = $properties.Item("Creation Date").Value
} catch {
$creationDate = "N/A"
}
try {
$author = $properties.Item("Author").Value
} catch {
$author = "N/A"
}
try {
$lastAuthor = $properties.Item("Last Author").Value
} catch {
$lastAuthor = "N/A"
}
$values += ,("Creation Date", $creationDate)
$values += ,("Author", $author)
$values += ,("Last Edited By", $lastAuthor)
# カスタムプロパティを設定する関数
function Set-OfficeDocCustomProperty {
[OutputType([boolean])]
Param
(
[Parameter(Mandatory=$true)]
[string] $PropertyName,
[Parameter(Mandatory=$true)]
[string] $Value,
[Parameter(Mandatory=$true)]
[System.__ComObject] $Document
)
try
{
$customProperties = $Document.CustomDocumentProperties
$binding = "System.Reflection.BindingFlags" -as [type]
[array]$arrayArgs = $PropertyName,$false, 4, $Value
try
{
[System.__ComObject].InvokeMember("add", $binding::InvokeMethod,$null,$customProperties,$arrayArgs) | out-null
}
catch [system.exception]
{
$propertyObject = [System.__ComObject].InvokeMember("Item", $binding::GetProperty, $null, $customProperties, $PropertyName)
[System.__ComObject].InvokeMember("Delete", $binding::InvokeMethod, $null, $propertyObject, $null)
[System.__ComObject].InvokeMember("add", $binding::InvokeMethod, $null, $customProperties, $arrayArgs) | Out-Null
}
return $true
}
catch
{
return $false
}
}
# カスタムプロパティを読み取る関数
function Get-OfficeDocCustomProperty {
[OutputType([string], $null)]
Param
(
[Parameter(Mandatory=$true)]
[string] $PropertyName,
[Parameter(Mandatory=$true)]
[System.__ComObject] $Document
)
try {
$comObject = $Document.CustomDocumentProperties($PropertyName)
$binding = "System.Reflection.BindingFlags" -as [type]
$val = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$comObject,$null)
return $val
} catch {
return $null
}
}
# カスタムプロパティを設定
$customPropertyName = "Project"
$customPropertyValue = "FA"
Set-OfficeDocCustomProperty -PropertyName $customPropertyName -Value $customPropertyValue -Document $workbook
# カスタムプロパティを読み取る
$customPropertyValueRead = Get-OfficeDocCustomProperty -PropertyName $customPropertyName -Document $workbook
$values += ,($customPropertyName, $customPropertyValueRead)
# プロパティの値を新しいシートの範囲に設定
for ($i = 0; $i -lt $values.Length; $i++) {
$newWorksheet.Cells.Item($i + 1, 1).Value2 = $values[$i][0]
$newWorksheet.Cells.Item($i + 1, 2).Value2 = $values[$i][1]
}
# Excelファイルを保存して閉じる
$workbook.Save()
$workbook.Close()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
Write-Host "Ready!" -ForegroundColor Green
# メソッド
# addCustomProperty(key, value)
# 新しいカスタム プロパティを作成、または既存のカスタム プロパティを設定します。
# deleteAllCustomProperties()
# このコレクション内のすべてのカスタム プロパティを削除します。
# getAuthor()
# ブックの作成者。
# getCategory()
# ブックのカテゴリ。
# getComments()
# ブックのコメント。
# getCompany()
# ブックの会社。
# getCreationDate()
# ブックの作成日を取得します。
# getCustom()
# ブックのカスタム プロパティのコレクションを取得します。
# getCustomProperty(key)
# キーを使用してカスタム プロパティ オブジェクトを取得します。大文字と小文字は区別されません。 カスタム プロパティが存在しない場合、このメソッドは を返します undefined。
# getKeywords()
# ブックのキーワード。
# getLastAuthor()
# ブックの最後の作成者を取得します。
# getManager()
# ブックのマネージャー。
# getRevisionNumber()
# ブックのリビジョン番号を取得します。
# getSubject()
# ブックの件名。
# getTitle()
# ブックのタイトル。
# setAuthor(author)
# ブックの作成者。
# setCategory(category)
# ブックのカテゴリ。
# setComments(comments)
# ブックのコメント。
# setCompany(company)
# ブックの会社。
# setKeywords(keywords)
# ブックのキーワード。
# setManager(manager)
# ブックのマネージャー。
# setRevisionNumber(revisionNumber)
# ブックのリビジョン番号を取得します。
# setSubject(subject)
# ブックの件名。
# setTitle(title)
# ブックのタイトル。