在Windows资源管理器中右键单击文件并从菜单中选择“属性”时,会出现一个对话框,显示该文件的基本属性。
我试图获取文件夹中word文件的这些属性(关键字,注释,标题...)。
我修改了一个我在某处找到的代码,它在vba(MSWord office宏)中运行良好:
Private Sub CommandButton1_Click()
Dim arrHeaders(35)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\Scripts")
For i = 0 To 34
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
Next
For Each FileName In objFolder.Items
For i = 0 To 34
MsgBox i & vbTab & arrHeaders(i) & ": " & objFolder.GetDetailsOf(FileName, i)
Next
Next
End Sub
所以我试图让它在delphi中的对象pascal中运行。我仍然缺少一些语法。
我能够转换一半的语法:
procedure TFormAFDetails.Button1Click(Sender: TObject);
var
ObjShell, ObjFolder : Variant;
FileProp : array of string;
FName : String;
I, J : Integer;
begin
SetLength(FileProp, 35);
ObjShell := CreateOleObject('Shell.Application');
ObjFolder := ObjShell.NameSpace('C:\Scripts');
for I := 0 to 34 do
FileProp[I] := ObjFolder.GetDetailsOf(ObjFolder.Items,I);
for FName in ObjFolder.Items do
begin
for J := 0 to 34 do
ShowMessage(FileProp[J]+' : '+ObjFolder.GetDetailsOf(FName,J));
end;
end;
部分" for-in-do"不会像它说的那样工作
//for -in statement can't operate on collection type 'variant'
有人可以帮帮我吗?
答案 0 :(得分:3)
你问的问题的答案是:
for I := 0 to ObjFolder.Items.Count-1 do
begin
FName := ObjFolder.Items.Item(I);
....
end;
代码看起来有点奇怪,尤其是使用魔法值35。