[英]merge cells with same values in microsoft office interop excel
我創建了一個導出到excel的報告。 它出口很好。 我現在想做的是合並具有相同值的列中的連續單元格。 我該怎么做呢? 請幫我。
這是生成excel主體的代碼:
Protected Sub generateExcelBody(ByVal xcelworksheet As Microsoft.Office.Interop.Excel.Worksheet, ByVal recarray As Array, ByVal numofrecords As Integer)
Dim chartrange As Microsoft.Office.Interop.Excel.Range
chartrange = Nothing
chartrange = xcelworksheet.Range("B5", "F5")
chartrange.MergeCells = True
chartrange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft
chartrange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
chartrange = Nothing
chartrange = xcelworksheet.Range("A8", System.Reflection.Missing.Value)
chartrange.FormulaR1C1 = "Record Series : " & hiddenrs.Value
chartrange = Nothing
chartrange = xcelworksheet.Range("A9", System.Reflection.Missing.Value)
chartrange.FormulaR1C1 = "Department : " & hiddendept.Value
chartrange = Nothing
chartrange = xcelworksheet.Range("A10", System.Reflection.Missing.Value)
chartrange.FormulaR1C1 = "Number of Records : " & numofrecords
chartrange = Nothing
chartrange = xcelworksheet.Range("A14", "F14")
chartrange.Resize(numofrecords, 6).Value2 = recarray
chartrange.Resize(numofrecords, 6).Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft).Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium
chartrange.Resize(numofrecords, 6).Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight).Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium
chartrange.Resize(numofrecords, 6).Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal).Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
chartrange.Resize(numofrecords, 6).Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical).Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin
chartrange.Resize(numofrecords, 6).Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom).Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlMedium
chartrange.Resize(numofrecords, 6).WrapText = True
chartrange.Resize(numofrecords, 6).EntireRow.AutoFit()
chartrange.Resize(numofrecords, 6).Font.Size = 10
chartrange.Resize(numofrecords, 6).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter
chartrange.Resize(numofrecords, 6).VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
End Sub
您要執行的是if-else語句,以檢查一列的值是否重復。 如果是->合並單元格。 您可以在Excel中使用內置的合並單元格功能,也可以“隱藏”重復單元格的值+隱藏原始單元格和重復單元格之間的邊界。 在搜尋時發現了這個。
Sub FormatLikeDates()
Dim d As Date, r As Long, n As Integer, c As Range
For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Int(Cells(r, 1)) = Int(Cells(r + 1, 1)) Then
n = n + 1
End If
If Int(Cells(r, 1)) <> Int(Cells(r + 1, 1)) And n > 0 Then
For Each c In Range(Cells(r - n + 1, 1), Cells(r, 1))
c.Font.ColorIndex = 2
c.Interior.ColorIndex = 2
Next c
Range(Cells(r - n, 1), Cells(r, 1)).BorderAround ColorIndex:=3, Weight:=xlThin
n = 0
End If
Next r
結束子
我剛收到一條通知,說這個問題有1000多次觀看,所以我想我應該發布一年前為解決這個問題所做的事情。 我希望你們覺得它有用。
Public Sub mergeRows(ByVal grid As GridView)
For rowIndex As Integer = (grid.Rows.Count - 2) To 0 Step -1
Dim currRow As GridViewRow = grid.Rows(rowIndex)
Dim prevRow As GridViewRow = grid.Rows(rowIndex + 1)
For i As Integer = 0 To (currRow.Cells.Count - 1)
If currRow.Cells(0).Text = prevRow.Cells(i).Text Then
currRow.Cells(0).RowSpan = IIf(prevRow.Cells(0).RowSpan < 2, 2, prevRow.Cells(0).RowSpan + 1)
prevRow.Cells(0).Visible = False
If currRow.Cells(1).Text = prevRow.Cells(1).Text Then
currRow.Cells(1).RowSpan = IIf(prevRow.Cells(1).RowSpan < 2, 2, prevRow.Cells(1).RowSpan + 1)
prevRow.Cells(1).Visible = False
currRow.Cells(2).RowSpan = IIf(prevRow.Cells(1).RowSpan < 2, 2, prevRow.Cells(1).RowSpan + 1)
prevRow.Cells(2).Visible = False
End If
End If
Next
Next
End Sub
Protected Sub Gridview1_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Gridview1.PreRender
mergeRows(Gridview1)
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.