2009-03-24 36 views
5

Từ một kịch bản VBS tôi phải làm việc với một cuốn sách với định dạng Excel:Làm cách nào để tìm các hàng bắt đầu và kết thúc của các ô đã phối trong Excel bằng VBSCript?

|  A  |  B  |  C  | 
----|-----------|-----------|-----------| 
    1 | Header1 | Header2 | Header3 | 
----|-----------|-----------|-----------| 
    2 | FOLDER1 |   |   | 
----|-----------|-----------|-----------| 
    3 | Item1 | 111 | 222 | 
----|   |-----------|-----------| 
    4 |   | Item1Info | Item1Data | 
----|   |-----------|-----------| 
.. |   | ... | ... | 
----|   |-----------|-----------| 
11 |   | 333 | 444 | 
----|-----------|-----------|-----------| 
12 | Item2 | 555 | 666 | 
----|-----------|-----------|-----------| 
13 | FOLDER2 |   |   | 
----|-----------|-----------|-----------| 
14 | Item1 | 777 | 888 | 
----|-----------|-----------|-----------| 
.. | ... | ... | ... | 

Vì vậy: Cột A có mức độ 1 và loại cấp 2 (Folders/Items), và Cột B và C giữ dữ liệu cho các mục. Vấn đề ở đây là một mục có thể mở rộng một vài hàng, như được hiển thị; Item1 là ô đã phối từ hàng 3 đến 11).

tôi cần phải tạo ra một .csv từ dữ liệu này trông như sau:

Header1,Header2,Header3 
111,Item1,FOLDER1 
Item1Info,Item1,FOLDER1 
... 
555,Item2,FOLDER1 
777,Item1,FOLDER2 
... 

Dữ liệu trong cột C có thể được loại bỏ. Về cơ bản, những gì tôi cần biết là làm thế nào để phát hiện nếu một tế bào được sáp nhập (có nghĩa là, nhiều hơn một hàng thông tin cho mỗi mục) có bao nhiêu hàng được hợp nhất với nhau. Bất kỳ ý tưởng?

Trả lời

10

Bạn có thể sử dụng:

if (Cell.MergeCells) Then ... 

để xác định xem một tế bào là một phần của một loạt sáp nhập, và

Cell.MergeArea.Cells(1,1).value 

để truy cập giá trị chứa trong phạm vi sáp nhập.

Dưới đây là một số mã mẫu để giúp bạn bắt đầu. Tôi đã bỏ qua các chi tiết của việc viết các tập tin CSV:

Public Sub MakeCSV() 
    Dim rowIndex As Integer 
    Dim itemColumn As Range 
    Dim dataColumn As Range 
    Dim itemCell As Range 
    Dim FolderName As String 
    Dim ItemName As String 
    Dim CSVLine As String 

    Set itemColumn = Range("A2:A100") 
    Set dataColumn = Range("B2:B100") 

    For rowIndex = 1 To dataColumn.Rows.Count 
     If dataColumn.Cells(rowIndex, 1).value = "" Then 
      Rem // determine the current folder name 
      FolderName = itemColumn.Cells(rowIndex, 1).value 
     Else 
      Rem // determine the item name (accounting for merged cells) 
      Set itemCell = itemColumn.Cells(rowIndex, 1) 
      If itemCell.MergeCells Then 
       ItemName = itemCell.MergeArea.Cells(1, 1).value 
      Else 
       ItemName = itemCell.value 
      End If 

      Rem // write a line to the CSV file 
      CSVLine = dataColumn.Cells(rowIndex, 1).value 
      CSVLine = CSVLine & "," & ItemName 
      CSVLine = CSVLine & "," & FolderName 
     End If 
    Next rowIndex 
End Sub 
0

Để kiểm tra nếu các tế bào sáp nhập bao gồm hơn sau đó một Row:

cellRange = ExcelApplication.Cells(rowIndex, columnIndex)  
mergedColumns = cellRange.MergeArea.Rows.Count 
if mergedColumns > 1 then ' merged 
2

Cảm ơn cho câu trả lời của bạn. eJames Tôi nghĩ rằng bạn đã trả lời mọi thứ tôi muốn biết, cách phát hiện các ô đã phối và cũng chỉ định FolderName/ItemName. Cảm ơn bạn lần nữa.

tôi có thể viết CSV không có vấn đề, khi xem xét kỹ tôi nhận thấy rằng cũng các tế bào FOLDERn merge cột (AC) như vậy có lẽ tôi cũng có thể kiểm tra với mã Mister Lucky:

mergedColumns = cellRange.MergeArea.Columns.Count 

Và nếu mergedColumns> 1 thì đó là tên thư mục.

Các vấn đề liên quan