Шаблон кода для роботи з MS Excel.
У мене є декілька шаблонів коду для роботи з Excel за допомогою Microsoft.OLEDB provider, але я звернув увагу що шаблони коду для роботи з MS Excel'ом у бекграунді вже дуже застарілі ExcelPrice Converter - скачка и преобразование документов Excel в нужный формат за три клика мышкой, Формирование Excel-отчетов, VBA1, VBA2. Тому ліквідую цей недолік і публікую свій сучасний шаблон для роботи з MS Excel. Зверніть увагу, що таким чином працювати на сервері не можна, тільки у десктопних прогах.
Цей шаблон використовується для того, щоб прочитати дані. Якщо саме Єксел далі не потрібен, треба раскоментувати стрічки 50-61.
1: Dim iMRow As Integer, iMCol As Integer
2: Dim xlApp As Microsoft.Office.Interop.Excel.Application
3: Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
4: Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
5: Dim xlRange As Microsoft.Office.Interop.Excel.Range
6:
7:
8: Private Sub GetExcelButton_Click(sender As Object, e As EventArgs) Handles GetExcelButton.Click
9: Dim GetExcel As New OpenFileDialog
10:
11: GetExcel.Title = "Get Excel file"
12: GetExcel.Filter = "Excel|*.xls;*.xlsx;*.xlsm"
13: If GetExcel.ShowDialog = DialogResult.OK Then
14:
15: Dim xlPath = GetExcel.FileName
16:
17:
18:
19: Try
20: xlApp = New Microsoft.Office.Interop.Excel.Application
21: Catch ex As Exception
22: MessageBox.Show("Error for open Excel file. Is you install MS Office correctly?" & vbCrLf & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
23: Exit Sub
24: End Try
25:
26: xlApp.Visible = False
27:
28: Try
29: xlBook = xlApp.Workbooks.Open(Filename:=xlPath, ReadOnly:=True)
30: Catch ex As Exception
31: MsgBox(ex.Message, MsgBoxStyle.Critical)
32: xlApp.Quit()
33: xlApp = Nothing
34: Exit Sub
35: End Try
36:
37: If xlBook.Sheets.Count > 0 Then
38:
39: xlSheet = xlBook.Sheets(1)
40:
41: Dim iRow As Integer
42: For i = 1 To 256 'get Max row/column
43:
44: xlRange = xlSheet.Columns(i).Find(What:="*", SearchDirection:=2, SearchOrder:=1)
45:
46: If Not IsNothing(xlRange) Then
47: iRow = xlRange.Row
48: If iMRow < iRow Then iMRow = iRow
49: iMCol = i
50: End If
51: Next
52:
53: If iMRow = 0 Or iMCol = 0 Then
54: MsgBox("Nothing data.")
55: Exit Sub
56: End If
57:
58: If ColumnNumberNumericUpDown.Value > iMCol Then
59: MsgBox("Url column number too big")
60: Exit Sub
61: End If
62:
63: 'Transfer all sheet to oArr
64: Dim oArr(,) As Object = xlSheet.Range(xlSheet.Cells(1, 1), xlSheet.Cells(iMRow, iMCol + 2)).Value
65:
66: 'xlBook.Close(False)
67: 'xlRange = Nothing
68: 'xlBook = Nothing
69:
70: Dim UrlSrt As New Text.StringBuilder
71: Dim uriResult As Uri
72:
73: For i As Integer = 1 To iMRow
74: Dim IsUrlCorrect As Boolean = False
75:
76: Try
77: IsUrlCorrect = Uri.TryCreate(oArr(i, ColumnNumberNumericUpDown.Value).ToString, UriKind.Absolute, uriResult) And
78: (uriResult.Scheme = Uri.UriSchemeHttp Or uriResult.Scheme = Uri.UriSchemeHttps)
79: If IsUrlCorrect Then
80: UrlList.Add(oArr(i, ColumnNumberNumericUpDown.Value).ToString)
81: UrlSrt.AppendLine(oArr(i, ColumnNumberNumericUpDown.Value).ToString)
82: End If
83:
84: Catch ex As Exception
85: 'uriResult is nothing - this is no URL
86: End Try
87: Next
88:
89: MsgBox("Found " & UrlList.Count & " URL" & vbCrLf & UrlSrt.ToString)
90:
91: Else
92: MsgBox("Nothing sheet with data.")
93: Exit Sub
94: End If
95: End If
96: End Sub
Якщо Єксел наприкінці проги повинен щось показати, тобто потрібно відкрити сам Єксел та необхідно щоб він щось показав, це робиться ось так:
1: Private Sub ShowExcel_Click(sender As Object, e As EventArgs) Handles ShowExcel.Click
...
7: xlSheet.Cells(i, ColumnNumberNumericUpDown.Value + 1).value = BrowserForm_Instance.DownliadedFileList(j).FullFileName
...
15: xlApp.Visible = True
16: xlSheet.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVisible
17: End Sub
|