从VBS脚本我必须使用以下格式的Excel书籍:
| 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 | ----|-----------|-----------|-----------| .. | ... | ... | ... |
因此:列A具有第1级和第2级类别(文件夹/项目),列B和C包含项目的数据.这里的问题是一个项目可以跨越几行,如图所示; Item1是第3行到第11行的合并单元格.
我需要从这些数据创建一个.csv,如下所示:
Header1,Header2,Header3 111,Item1,FOLDER1 Item1Info,Item1,FOLDER1 ... 555,Item2,FOLDER1 777,Item1,FOLDER2 ...
可以丢弃C列中的数据.
基本上,我需要知道的是如何检测单元格是否合并(即每个项目有多行信息)以及合并多少行.任何的想法?
您可以使用:
if (Cell.MergeCells) Then ...
确定一个单元格是否是合并范围的一部分,并且
Cell.MergeArea.Cells(1,1).value
访问该合并范围中包含的值.
这里有一些示例代码可以帮助您入门.我省略了实际编写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