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