Hướng dẫn can powershell automate excel? - powershell có thể tự động hóa excel không?

Ngày 8 tháng 9 năm 2006

Hướng dẫn can powershell automate excel? - powershell có thể tự động hóa excel không?

Này, anh chàng kịch bản! Làm cách nào để sử dụng Windows PowerShell để tự động hóa Microsoft Excel?

- MW

Hướng dẫn can powershell automate excel? - powershell có thể tự động hóa excel không?
Hướng dẫn can powershell automate excel? - powershell có thể tự động hóa excel không?
Hướng dẫn can powershell automate excel? - powershell có thể tự động hóa excel không?

Này, MW. Đúng, đó là sự thật: Tuần ngày 6-10 tháng 11 năm 2006 sẽ là Windows PowerShell Week trên Technet, với các kịch bản trình bày một loạt các webcast (một ngày mỗi ngày, từ thứ Hai đến thứ Sáu) được thiết kế để giới thiệu bạn với Windows PowerShell. Đó là tất cả các chi tiết tại thời điểm này (chúng tôi sẽ giữ cho bạn được đăng), nhưng bạn có thể đặt cược rằng tuần sẽ tràn ngập niềm vui và sự phấn khích khi chúng tôi chỉ ra cách thực hiện tất cả các loại nhiệm vụ quản trị hệ thống hữu ích bằng cách sử dụng Windows PowerShell.

Cái gì mà đó? Chà, chúng tôi cho rằng nó giống như một giấc mơ trở thành sự thật, cho rằng bạn luôn mơ về Windows PowerShell. Và không, đó là OK OK: tất cả những điều được xem xét, chúng tôi sẽ không biết bạn luôn mơ ước gì.

Ghi chú. Những người kịch bản mơ ước về điều gì? Đáng ngạc nhiên là đủ, không ai trong số những kẻ kịch bản mơ ước. Nhưng, một lần nữa, có lẽ điều đó không đáng ngạc nhiên: sau tất cả, khi bạn làm việc tại Microsoft, bạn sẽ sống trong giấc mơ.. What do the Scripting Guys dream about? Surprisingly enough, none of the Scripting Guys dream. But, then again, maybe that’s not so surprising: after all, when you work at Microsoft you’re living the dream.

Nhiều hơn hoặc ít hơn.

Vì vậy, MW, chúng tôi sẽ khiến bạn đợi đến tháng 11 trước khi chúng tôi chỉ cho bạn cách bạn có thể sử dụng Windows PowerShell để tự động hóa Microsoft Excel? Vâng, để nói cho bạn sự thật, đó là kế hoạch ban đầu. Nhưng sau đó, chúng tôi nhận ra rằng chúng tôi phải đọc thêm một vài email, rằng chúng tôi đã chọn ra một câu hỏi khác để trả lời, rằng chúng tôi - không cần phải nói, nghe có vẻ như rất nhiều công việc. Đặc biệt là khi bạn xem xét mức độ dễ dàng khi chỉ viết một tập lệnh mẫu sử dụng Windows PowerShell để tự động hóa Microsoft Excel:

$a = New-Object -comobject Excel.Application

$a.Visible = $True

$b = $a.Workbooks.Add() $c = $b.Worksheets.Item(1)

$c.Cells.Item(1,1) = “A value in cell A1.” $b.SaveAs(“C:\Scripts\Test.xls”)

$a.Quit()

Chìa khóa cho tập lệnh này xảy ra trong dòng đầu tiên, cái mà chúng tôi sử dụng màn hình mới đối tượng để tạo một thể hiện của Microsoft Excel. Lưu ý rằng chúng ta cần vượt qua hai mục đối tượng mới: tham số ComcomoBject, cho biết CMDlet rằng chúng ta muốn tạo một đối tượng COM mới (trái ngược với, một đối tượng .NET Framework mới); và excel. application, progid của đối tượng chúng ta muốn tạo. Và không, chúng tôi đã không phạm sai lầm (dù sao đi nữa, không phải ở đây): Bạn không cần phải đặt progid trong các dấu ngoặc kép.New-Object Cmdlet to create an instance of Microsoft Excel. Notice that we need to pass New-Object two items: the –comobject parameter, which tells the Cmdlet that we want to create a new COM object (as opposed to, say, a new .NET Framework object); and Excel.Application, the ProgID of the object we want to create. And no, we didn’t make a mistake (well, not here anyway): you don’t need to enclose the ProgID in double quote marks.

Và bạn tự hỏi tại sao mọi người rất hào hứng với Windows PowerShell!

Trong thực tế, dòng 1 tương đương với dòng mã VBScript này:

Set a = CreateObject(“Excel.Application”)

Mặc dù các dòng tương đương về mặt chức năng, có một vài khác biệt chúng ta nên chỉ ra. Đối với một, trong Windows PowerShell, chúng tôi không phải sử dụng từ khóa SET (hoặc một số tương đương) để tạo tham chiếu đối tượng. Đối với người khác, chúng ta cần sử dụng một tên biến như $ a; Trong các tên biến Windows PowerShell phải bắt đầu bằng dấu hiệu đô la ($).

Những điều nhỏ nhặt, chắc chắn, nhưng những điều bạn cần biết.

Bây giờ, trở lại với kịch bản. Trong dòng tiếp theo, chúng tôi đặt thuộc tính có thể nhìn thấy của Excel thành True, do đó cho phép chúng tôi xem ứng dụng trên màn hình:Visible property of Excel to true, thus enabling us to see the application onscreen:

$a.Visible = $True

Điều đó phải quen thuộc một cách hợp lý: bạn đặt các giá trị thuộc tính trong Windows PowerShell bằng cách sử dụng ký hiệu của Dot Dot giống như bạn làm trong VBScript. Sự khác biệt thực sự duy nhất ở đây? Chúng tôi đặt thuộc tính có thể nhìn thấy thành $ true, mở trước biến tích hợp với một dấu hiệu đô la. Hãy nhớ rằng khi chúng tôi nói rằng bạn phải mở đầu các tên biến với một dấu hiệu đô la? Có một lý do tại sao chúng tôi đề cập đến điều đó.$True, prefacing the built-in variable with a dollar sign. Remember when we said you had to preface variable names with a dollar sign? There’s a reason why we mentioned that.

Hãy nghĩ về nó, vâng, đó có thể là lần đầu tiên chúng ta có một lý do hợp lệ để nói điều gì đó trong cột này.

Điều đó đưa chúng ta đến hai dòng mã sau, các dòng mà chúng tôi sử dụng phương thức Thêm để thêm sổ làm việc mới vào ví dụ Excel của chúng tôi, sau đó sử dụng thuộc tính mục để tạo tham chiếu đối tượng vào bảng tính đầu tiên trong sổ làm việc đó:Add method to add a new workbook to our instance of Excel, then use the Item property to create an object reference to the first worksheet in that workbook:

$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)

Cảm ơn vì đã chỉ ra điều đó: dòng thứ hai khác biệt so với những gì bạn thấy trong VBScript, phải không? Trong VBScript, chúng tôi tạo một tham chiếu đối tượng đến Bảng tính 1 bằng mã tương tự như thế này:

Set c = b.Worksheets(1)

Điều đó đủ dễ dàng: Chúng tôi muốn bảng tính 1 vì vậy chúng tôi chỉ định bảng tính (1). Vậy thì tại sao, trong Windows PowerShell, chúng ta có gọi bảng tính 1 là bảng tính.item (1) không?Worksheets(1). Then why, in Windows PowerShell, do we refer to worksheet 1 as Worksheets.Item(1)?

Vâng, hóa ra, thuộc tính mục là thuộc tính mặc định cho đối tượng bảng tính. Trong VBScript, bạn thường có thể thoát khỏi mà không tham khảo rõ ràng thuộc tính mặc định; Nếu bạn không chỉ định tên thuộc tính thì VBScript sử dụng thuộc tính mặc định. Tuy nhiên, đó không phải là trường hợp với Windows PowerShell. Giả sử chúng tôi bỏ lại thuộc tính mặc định và đã thử tạo tham chiếu đối tượng bằng mã như sau:

$c = $b.Worksheets(1)

Điều gì sẽ xảy ra trong trường hợp đó? Đây:

Method invocation failed because [System.__ComObject] doesn’t contain a method named ‘Worksheets’.

Nói cách khác, hãy đảm bảo bạn luôn bao gồm tên thuộc tính, ngay cả khi xử lý thuộc tính mặc định.

Ghi chú. Thật thú vị, VBScript cho phép bạn làm điều này theo bất kỳ cách nào bạn muốn. Bạn muốn bỏ tên thuộc tính mặc định? Tốt rồi. Nhưng nếu bạn muốn tham khảo tên thuộc tính mặc định thì sao? Sau đó đi trước và làm như vậy; Dòng mã này hoạt động tốt trong VBScript:. Interestingly enough, VBScript lets you do this any which way you want. Want to leave out the default property name? That’s fine. But what if you want to reference the default property name? Then go ahead and do so; this line of code works just fine in VBScript:

Set c = b.Worksheets.Item(1)

Hai dòng mã tiếp theo có ở đó chỉ để chỉ cho bạn cách thực sự làm một cái gì đó với Excel sau khi ứng dụng hoạt động và chạy. Trong dòng 1, chúng tôi thêm một số văn bản vào ô A1 (hàng 1, cột 1); Một lần nữa, lưu ý rằng chúng tôi đề cập rõ ràng về thuộc tính vật phẩm khi xử lý các ô trong bảng tính. Sau khi sửa đổi ô A1, sau đó chúng tôi gọi phương thức Saveas để lưu bảng tính dưới dạng C: \ Scripts \ test.xls:Item property when dealing with the cells in the worksheet. After modifying cell A1 we then call the SaveAs method to save the spreadsheet as C:\Scripts\Test.xls:

$c.Cells.Item(1,1) = “A value in cell A1.”
$b.SaveAs(“C:\Scripts\Test.xls”)

Nói về các phương thức, bất cứ khi nào bạn gọi một phương thức trong Windows PowerShell, bạn phải bao gồm dấu ngoặc đơn ở cuối, ngay cả khi những dấu ngoặc đơn đó trống rỗng. Ví dụ: trong VBScript, bạn có thể gọi phương thức lưu bằng mã tương tự như thế này:

b.Save

Tuy nhiên, điều đó đã giành được rất nhiều trong Windows PowerShell. Thay vào đó, bạn cần phải giải quyết một tập hợp các dấu ngoặc đơn, cho Windows PowerShell rằng chúng tôi sử dụng một phương thức:

Set a = CreateObject(“Excel.Application”)
0

Và, vâng, chúng tôi biết. Nhưng bạn sẽ quen với nó ngay lập tức.

Sau khi chúng tôi lưu bảng tính, chúng tôi gọi phương thức bỏ thuốc (có một lần nữa dấu ngoặc đơn) và chúng tôi đã hoàn thành:Quit method (there’s those parentheses again) and we’re done:

Set a = CreateObject(“Excel.Application”)
1

Hy vọng rằng bạn sẽ bắt đầu, MW. Đối với những người khác, nếu hôm nay cột của Lôi có vẻ hơi bí ẩn, chủ yếu là vì bạn thậm chí chưa bao giờ nghe nói về Windows PowerShell, bạn có thể muốn xem qua Trung tâm Windows PowerShell của chúng tôi. OH: Và chúng tôi đã đề cập rằng Tuần lễ Windows PowerShell sẽ ra mắt vào ngày 6-10 tháng 11 năm 2006? Chà, chúng ta nên có: chắc chắn 5 webcast đó sẽ đại diện cho điều tốt nhất mà LỚN đã xảy ra với Windows PowerShell kể từ khi Windows PowerShell hoàn toàn mới, vì vậy không có nhiều điều đã thực sự xảy ra với nó. Nhưng bạn biết những gì chúng tôi muốn nói.Windows PowerShell center. Oh: and did we mention that Windows PowerShell Week is coming November 6-10, 2006? Well, we should have: undoubtedly those 5 webcasts will represent the best thing that’s happened to Windows PowerShell since … well, Windows PowerShell is brand-new, so not a lot has actually happened to it yet. But you know what we mean.

CẬP NHẬT: Windows PowerShell Week đã kết thúc, nhưng bạn có thể xem các webcast theo yêu cầu bất cứ lúc nào.Windows PowerShell Week is over, but you can watch the webcasts on-demand anytime.