我正在尝试导入每行都有问题的电子表格以及4个可能的答案。我可以成功读取单元格值,但正确的答案由填充图案(50%灰色)表示。我使用下面的代码循环遍历工作表并选择正确的答案。但是,即使模式在工作表上清晰可见,Pattern的值似乎对所有列都相同。我在找错了地方吗?
工作表是.xls文件。我正在使用Excel 2010和VS 2010。
Dim dt As New System.Data.DataTable
Dim wks As Worksheet = wkb.Worksheets(1)
Dim ur As Range = wks.UsedRange
' Load all cells into an array.
Dim SheetData(,) As Object = ur.Value(XlRangeValueDataType.xlRangeValueDefault)
' Loop through all cells.
For j As Integer = 1 To SheetData.GetUpperBound(0)
For k As Integer = 1 To (SheetData.GetUpperBound(1) - 1)
'Get the pattern for the cells in columns 7 - 10
If (k > 6) And (k < 11) Then
Dim r As Range = wks.Cells(j, k)
Dim s As Style = r.Style
If s.Interior.Pattern = XlPattern.xlPatternGray50 Then
'Convert column index to "A" - "D"
Dim key As Char = ChrW(k + 58)
'Do something with key
End If
End If
Next
Next
我查看了MSDN,但他们很少或根本没有解释样式在对象模型中的存储方式。我看到的几个例子显示使用Style.Interior.Pattern在选择单元格后设置值。我是否需要选择单元格来读取模式?
任何帮助都将不胜感激。
答案 0 :(得分:-1)
Interior.Pattern
对象访问 Range
。 Range
接口/对象包含范围的所有样式和值信息。
Style
对象的Range
属性是指在工作簿级别定义的样式(“共享”样式)。
来自MSDN:
Style对象包含所有样式属性(字体,数字格式,对齐方式等)作为属性。有几种内置样式,包括Normal,Currency和 百分。使用Style对象是一种快速有效的更改方式 多个单元格上的几个单元格格式属性。
在您的情况下(样式似乎在单元格级别定义而不是使用“共享”样式),您只需要替换:
Dim r As Range = wks.Cells(j, k)
Dim s As Style = r.Style
If s.Interior.Pattern = XlPattern.xlPatternGray50 Then
使用:
Dim r As Range = wks.Cells(j, k)
'Dim s As Style = r.Style 'no need
If r.Interior.Pattern = XlPattern.xlPatternGray50 Then