(Note) Note (2017)

Шаблон кода для роботи з 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


Comments ( )
Link to this page: //www.vb-net.com/ExcelTemplate/index.htm
< THANKS ME>