Hướng dẫn powershell excel format cell color - màu ô định dạng powershell excel

Tôi muốn làm nổi bật nội thất ô Excel bằng PowerShell, có thể thay đổi màu sắc của phông chữ, nhưng không phải toàn bộ màu tế bào

Vì vậy, đây là cách trang tính Excel của tôi, nó kiểm tra xem ô có "khớp" hay không và thay đổi màu sắc theo đó

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $False
$workbook = $excel.Workbooks.Open["C:\Users\test4.xls"]
$sheet = $workbook.ActiveSheet

$xlCellTypeLastCell = 11

$used = $sheet.usedRange 
$lastCell = $used.SpecialCells[$xlCellTypeLastCell] 
$row = $lastCell.row # goes to the last used row in the worksheet
$column = $lastCell.Column; 
$i = 0 
for [$J = 2; $J -le $column; $j++] {
     $sheet.Cells.Item[$i,$j].Interior.ColorIndex = 48
     $sheet.Cells.Item[$i,$j].Font.Bold=$True
}
for [$i = 2; $i -le $row; $i++] {
    for[$j = 5 ; $j -le $column ; $j++]{
        if [[$sheet.cells.Item[$i,$j].Value[]] -like "*Matching"] {
            $sheet.Cells.Item[$i,$j].Font.ColorIndex = 10
            $sheet.Cells.Item[$i,$j].Font.Bold = $true
        }
        if[[$sheet.cells.Item[$i,$j].Value[]] -like "*Not Matching"]{
            $sheet.Cells.Item[$i,$j].Font.ColorIndex = 3
            $sheet.Cells.Item[$i,$j].Font.Bold = $true
        }
    }
}

$workbook.SaveAs["C:\Users\output.xls"]
$workbook.Close[]

Đây là mã, vấn đề duy nhất là khi tôi đưa ra

$sheet.Cells.Item[$i,$j].Interior.ColorIndex = 48

Nó cho tôi một ngoại lệ

Exception from HRESULT: 0x800A03EC

Tôi muốn bàn của tôi trông như thế này,

Ngày 29 tháng 6 năm 2005

Này, anh chàng kịch bản! Tôi có một bảng tính Microsoft Excel Tôi định kỳ phân tích bằng một tập lệnh. Làm thế nào tôi có thể thay đổi màu của một ô thành màu đỏ nếu ngày được lưu trữ trong ô đó đã qua?

- DM

Này, DM. Chúng tôi sẽ bắt đầu vào ngày hôm nay, cột tắt với một số nhận xét thông minh và dí dỏm về những ngày đỏ tươi, nhưng chúng tôi thực sự không thể nghĩ ra một. Do đó, chúng tôi sẽ giả vờ rằng chúng tôi không có thời gian cho những điều vô nghĩa như vậy và thay vào đó hãy xuống ngay để kinh doanh.

Ghi chú. Cột này được viết bởi cùng một anh chàng kịch bản, một thời gian ngắn trước đây, thấy mình không thể nghĩ ra một từ bắt đầu bằng một chữ K. rằng hàng triệu từ bắt đầu với chữ K.] với tốc độ mà tâm trí anh ta đang xấu đi, cột này sẽ sớm bao gồm một câu hỏi và sau đó là một khu vực trống lớn nơi câu trả lời được cho là sẽ đi.. This column is written by the same Scripting Guy who, a short time ago, found himself unable to think of a word that started with a letter K. [Yes, yes: kite, kitten, kid, kindergarten; he’s well aware – now – that millions of words start with the letter K.] At the rate his mind is deteriorating this column will soon consist of a question and then a big blank area where the answer was supposed to go.

Này: Ai nói rằng đó sẽ là một cải tiến?!?

Để giữ cho lời giải thích tập trung vào nhiệm vụ trong tay, hãy để cho rằng bạn có một bảng tính nhỏ rất đơn giản, một bảng tính bao gồm một loạt ngày [tất cả trong cột A]. Bảng tính nhỏ đơn giản của chúng tôi trông giống như thế này:


Những gì chúng tôi muốn làm là tạo một tập lệnh có thể mở tệp này, kiểm tra ngày trong mỗi ô và, nếu ngày cụ thể đó đã được thông qua, hãy thay đổi màu nền của ô thành màu đỏ. Nói cách khác, sau khi tập lệnh kết thúc, chúng tôi muốn bảng tính của chúng tôi trông như thế này:


Vậy chúng ta có thể làm điều này không? Chà, trong khi anh chàng kịch bản của chúng tôi dường như không còn có khả năng sử dụng ngôn ngữ tiếng Anh, thì ít nhất anh ấy cũng có thể viết kịch bản mọi lúc:

Set objExcel = CreateObject[“Excel.Application”]
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Open[“C:\Scripts\Test.xls”]

x = 1

Do Until objExcel.Cells[x,1].Value = “” If CDate[objExcel.Cells[x,1].Value] < Date Then objExcel.Cells[x,1].Interior.ColorIndex = 3 End If x = x + 1 Loop

Tất cả những thứ được coi là một kịch bản ngắn, phải không? Kịch bản bắt đầu bằng cách tạo một thể hiện của đối tượng excel. người áp dụng và sau đó đặt thuộc tính hiển thị thành true. Sau đó, chúng tôi sử dụng phương thức mở để mở tệp c: \ scripts \ test.xls. Tất cả chỉ đơn giản là mở bảng tính của chúng tôi và làm cho nó hiển thị trên màn hình.Excel.Application object and then setting the Visible property to True. We then use the Open method to open the file C:\Scripts\Test.xls. All that simply opens up our spreadsheet and makes it visible on screen.

Sau khi bảng tính của chúng tôi bật lên, chúng tôi gán giá trị 1 cho một biến bộ đếm có tên x; Chúng tôi sẽ sử dụng biến này để theo dõi hàng hiện tại khi chúng tôi làm việc theo cách thông qua bảng tính. Tiếp theo, chúng tôi, bắt đầu làm việc theo cách của chúng tôi thông qua bảng tính, thiết lập một vòng lặp tiếp tục cho đến khi chúng tôi gặp phải một giá trị trống trong cột A. Đó là những gì dòng mã này làm:

Do Until objExcel.Cells[x,1].Value = “”

Ghi chú. Tại sao chúng ta làm điều đó? Chà, vì mục đích đơn giản, chúng tôi giả sử rằng bạn không có ô trống trong cột A. Do đó ngay khi chúng tôi gặp phải một ô trống, chúng tôi sẽ biết rằng chúng tôi đã hết dữ liệu.. Why do we do that? Well, for the sake of simplicity we’re assuming you have no blanks cells in column A. Therefore as soon as we encounter a blank cell we’ll know that we’ve run out of data.

Bên trong vòng lặp DO của chúng tôi, chúng tôi kiểm tra xem giá trị của ô hiện tại có nhỏ hơn ngày hôm nay không. Chúng tôi làm điều đó bằng cách lấy giá trị của ô hiện tại-objexcel.cells. [X, 1] .Value-và sử dụng hàm VBScript CDATE [ký tự từ này] để đảm bảo giá trị được coi là ngày. Sau đó, chúng tôi so sánh giá trị đó với ngày hiện tại [mà chúng tôi có thể nhận được bằng cách sử dụng hàm ngày]. Nếu giá trị ô ít hơn thì ngày hiện tại, thì chúng tôi sử dụng dòng mã này để thay đổi màu bên trong [nền] của ô thành màu đỏ:CDate [character-to-date] function to ensure that the value is treated as a date. We then compare that value to the current date [which we can get by using the Date] function. If the cell value is less then the current date, then we use this line of code to change the interior [background] color of the cell to red:

objExcel.Cells[x,1].Interior.ColorIndex = 3

Ghi chú. Làm thế nào chúng ta biết rằng việc thiết lập ColorIndex thành 3 sẽ cho chúng ta một nền màu đỏ? Chúng tôi đã làm, ít nhất là cho đến khi chúng tôi chạy tập lệnh được tham chiếu ở đây cho chúng tôi thấy tất cả các màu nền và các giá trị tương ứng của chúng.. How did we know that setting the ColorIndex to 3 would give us a red background? We didn’t, at least not until we ran the script referenced here that shows us all the background colors and their corresponding values.

Có tất cả những thứ đó? Nếu bạn không chắc chắn tại sao chúng tôi lại kiểm tra giá trị của objexcel.cells [x, 1] hãy nhớ rằng X là một biến chúng tôi tạo để theo dõi hàng hiện tại. Bởi vì x bắt đầu với giá trị 1, những gì chúng tôi làm lần đầu tiên thông qua vòng lặp là kiểm tra ô [1,1]: hàng 1, cột 1. Sau khi thực hiện lần đầu tiên, chúng tôi tăng x 1; Do đó, lần tiếp theo thông qua vòng lặp, chúng tôi sẽ kiểm tra ô [2,1]: hàng 2, cột 1., v.v.

Chỉ là dễ dàng, chỉ nhanh như vậy. Chúng tôi đoán bạn có thể nói rằng, đó là điều đó, ok, chúng tôi có thể nghĩ về bất cứ điều gì để nói vào lúc này. Nhưng bạn hiểu ý rồi đấy.

Bài Viết Liên Quan

Chủ Đề