Public Sub ExportToExcelWithFormatting(ByVal dataGridView1 As DataGridView)
Dim fileName As String
Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog()
saveFileDialog1.Filter = "xls files (*.xlsx)|*.xlsx|All files (*.*)|*.*"
saveFileDialog1.Title = "To Excel"
saveFileDialog1.FileName = Me.Text & " (" + DateTime.Now.ToString("yyyy-MM-dd") & ")"
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
fileName = saveFileDialog1.FileName
Dim workbook = New Workbook()
Dim worksheet = workbook.Worksheets.Add(Me.Text)
For i As Integer = 0 To dataGridView1.Columns.Count - 1
worksheet.Cell(1, i + 1).Value = dataGridView1.Columns(i).Name
Next
For i As Integer = 0 To dataGridView1.Rows.Count - 1
For j As Integer = 0 To dataGridView1.Columns.Count - 1
worksheet.Cell(i + 2, j + 1).Value = dataGridView1.Rows(i).Cells(j).Value.ToString()
If worksheet.Cell(i + 2, j + 1).Value.ToString().Length > 0 Then
Dim align As XLAlignmentHorizontalValues
Select Case dataGridView1.Rows(i).Cells(j).Style.Alignment
Case DataGridViewContentAlignment.BottomRight
align = XLAlignmentHorizontalValues.Right
Case DataGridViewContentAlignment.MiddleRight
align = XLAlignmentHorizontalValues.Right
Case DataGridViewContentAlignment.TopRight
align = XLAlignmentHorizontalValues.Right
Case DataGridViewContentAlignment.BottomCenter
align = XLAlignmentHorizontalValues.Center
Case DataGridViewContentAlignment.MiddleCenter
align = XLAlignmentHorizontalValues.Center
Case DataGridViewContentAlignment.TopCenter
align = XLAlignmentHorizontalValues.Center
Case Else
align = XLAlignmentHorizontalValues.Left
End Select
worksheet.Cell(i + 2, j + 1).Style.Alignment.Horizontal = align
Dim xlColor As XLColor = XLColor.FromColor(dataGridView1.Rows(i).Cells(j).Style.SelectionBackColor)
worksheet.Cell(i + 2, j + 1).AddConditionalFormat().WhenLessThan(1).Fill.SetBackgroundColor(xlColor)
worksheet.Cell(i + 2, j + 1).Style.Font.FontName = dataGridView1.Font.Name
worksheet.Cell(i + 2, j + 1).Style.Font.FontSize = dataGridView1.Font.Size
End If
Next
Next
worksheet.Columns().AdjustToContents()
workbook.SaveAs(fileName)
End If
End Sub