2017-01-27 12 views
0

Мне не удалось установить высоту строки и ширину столбцов таблицы Excel из визуального базового приложения.Visual Basic с автоматизацией excel

У меня есть визуальное базовое приложение, где у меня есть данные в моем буфере обмена. Я копирую этот код в экземпляр excel, а затем преуспел, сохраняя полученную таблицу, а затем отлично закрывает. Я пытаюсь программно установить высоты строк и ширины ячеек перед сохранением электронной таблицы, но не смог этого сделать. Это код, который я выполнения:

If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 
    Dim oXL As Excel.Application 
    Dim oWB As Excel.Workbook 
    Dim oSheet As Excel.Worksheet 
    oXL = CreateObject("Excel.Application") 
    oXL.Visible = True 
    oWB = oXL.Workbooks.Add 
    oSheet = oWB.ActiveSheet 

    oSheet.Paste() 
    oSheet.Cells.Select() 
    oSheet.Selection.RowHeight = 11.4 
    oSheet.Cells.EntireColumn.AutoFit() 
    oSheet = Nothing 
    oWB.Close(True, SaveFileDialog1.FileName) 
    oWB = Nothing 
    oXL.Quit() 
    oXL = Nothing 
    MsgBox("Finished!") 
End If 

Приложение работает без oSheet.Cells.Select(), oSheet.Selection.RowHeight = 11,4 и oSheet.Cells.EntireColumn.AutoFit() линии. С этими строками я получаю это сообщение об ошибке:

Публичный член «Выбор» по типу «Рабочий лист» не найден.

Когда я трассирую программу в Visual Studio, выполняется команда oSheet.Paste() и выполняется команда oSheet.Cells.Select(). Исключение возникает при попытке выполнить команду oSheet.Selection.RowHeight = 11.4.

Любая помощь будет принята с благодарностью.

Джонатан

+1

Попробуйте это 'oSheet.Rows ("1: 1") RowHeight = 11.4', а также удалить' oSheet.Cells.Select() ' – Codexer

+0

Если вы собираетесь использовать' .Select', что это. [настоятельно рекомендуется избегать делать] (https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros), это будет просто '.Select', а не '.Select()'. – BruceWayne

+0

@ Zaggler - Я попробовал ваше предложение. Я больше не получаю сообщение об ошибке, но в полученной таблице нет строк с высотой 11.4, а столбцы также не автозаполняются. Любые другие предложения? –

ответ

0

Ниже не позднее связывание, это раннее связывание, но схема должна работать с небольшими изменениями кода.

Option Strict On 
Imports Excel = Microsoft.Office.Interop.Excel 
Imports System.Runtime.InteropServices 
Imports System.IO 

Public Class Operations 
    Public HasError As Boolean 
    Public ErrorMessage As String 
    ''' <summary> 
    ''' 
    ''' </summary> 
    ''' <param name="FileName">Path and file name for Excel file</param> 
    ''' <param name="SheetName">Sheet name to work on</param> 
    ''' <param name="RowHeight">Used to set row height in SheetName</param> 
    ''' <returns></returns> 
    Public Function SetWidthHeight(
     ByVal FileName As String, 
     ByVal SheetName As String, 
     ByVal RowHeight As Integer) As Boolean 

     If File.Exists(FileName) Then 

      Dim Proceed As Boolean = False 

      Dim xlApp As Excel.Application = Nothing 
      Dim xlWorkBooks As Excel.Workbooks = Nothing 
      Dim xlWorkBook As Excel.Workbook = Nothing 
      Dim xlWorkSheet As Excel.Worksheet = Nothing 
      Dim xlWorkSheets As Excel.Sheets = Nothing 
      Dim xlCells As Excel.Range = Nothing 

      xlApp = New Excel.Application 
      xlApp.DisplayAlerts = False 


      xlWorkBooks = xlApp.Workbooks 
      xlWorkBook = xlWorkBooks.Open(FileName) 

      xlApp.Visible = False 

      xlWorkSheets = xlWorkBook.Sheets 

      For x As Integer = 1 To xlWorkSheets.Count 
       xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet) 

       If xlWorkSheet.Name = SheetName Then 
        Proceed = True 
        Exit For 
       End If 

       Marshal.FinalReleaseComObject(xlWorkSheet) 
       xlWorkSheet = Nothing 

      Next 
      If Proceed Then 

       xlCells = xlWorkSheet.Cells 
       xlCells.PasteSpecial() 

       Dim EntireRow As Excel.Range = xlCells.EntireRow 
       ' 
       ' Set row height 
       ' 
       EntireRow.RowHeight = RowHeight 
       Dim ColRange = xlCells.EntireColumn 
       ' 
       ' Auto fit all columns 
       ' 
       ColRange.AutoFit() 
       ReleaseComObject(ColRange) 

       ReleaseComObject(xlCells) 
       ReleaseComObject(EntireRow) 

      Else 
       HasError = True 
       ErrorMessage = SheetName & " not found." 
      End If 

      xlWorkSheet.SaveAs(FileName) 

      xlWorkBook.Close() 
      xlApp.UserControl = True 
      xlApp.Quit() 

      ReleaseComObject(xlWorkSheets) 
      ReleaseComObject(xlWorkSheet) 
      ReleaseComObject(xlWorkBook) 
      ReleaseComObject(xlWorkBooks) 
      ReleaseComObject(xlApp) 

     Else 
      HasError = True 
      ErrorMessage = "'" & FileName & 
       "' not located. Try one of the write examples first." 
     End If 

     Return HasError 
    End Function 
    Private Sub ReleaseComObject(ByVal excelObject As Object) 
     Try 
      If excelObject IsNot Nothing Then 
       Marshal.ReleaseComObject(excelObject) 
       excelObject = Nothing 
      End If 
     Catch ex As Exception 
      excelObject = Nothing 
     End Try 
    End Sub 
End Class