LndM Ответов: 2

Vb.net редактирование определенных ячеек excel


Уважаемое Сообщество Code Project,

Я много искал и не нашел никакого решения, которое сработало бы для меня, так что, возможно, кто-то может дать мне подсказку о моей проблеме.

Id хотел бы показать значение ячейки в текстовом поле, которое может быть выбрано в зависимости от входных данных других текстовых полей.
На данный момент я знаю, как сделать сами текстовые поля и ограничить их числовыми входами.
Но когда я пытаюсь открыть файл excel ,отобразить конкретную ячейку с выбранного листа, я всегда получаю исключение NullReferenceException. Это как если бы мое объявление об открытии файла через xlApp.Workbooks.open(filename) не работает, и я не понимаю, почему?

Мой код выглядит примерно так на данный момент:
Private Sub ButtonShow_Click(sender As Object, e As EventArgs) Handles ButtonShow.Click
        Dim CellValue As String
        Dim filename As String = LabelFilePath.Text  
        If IO.File.Exists(filename) Then
            Dim xlApp As Excel.Application = Nothing
            Dim xlWorkbooks As Excel.Workbooks = Nothing
            Dim xlWorkbook As Excel.Workbook = Nothing
            Dim xlWorksheets As Excel.Worksheets = Nothing
            Dim xlWorksheet As Excel.Worksheet = Nothing
            Dim xlCells As Excel.Range = Nothing
            Try

                xlApp = New Excel.Application
                xlWorkbooks = xlApp.Workbooks
                xlWorkbook = xlApp.Workbooks.Open(filename)
                xlWorksheets = xlWorkbook.Sheets
                xlWorksheet = xlWorkbook.Sheets(TextBoxSheet)

                CellValue = xlWorksheet.Cells(TextBoxRow.Text, TextBoxColumn.Text)
                TextBoxCell.Text = CellValue

            Catch ex As Exception
                MessageBox.Show("Datei nicht vorhanden")
            Finally
                xlApp.Application.Quit()

            End Try
            

        End If
        
    End Sub
End Class


Если вам понадобится больше моего кода или объяснений, я постараюсь добавить их как можно скорее. Я также добавлю ваше решение в код здесь.

Что я уже пробовал:

Я тоже пробовал разные подходы открыть файл или запустить xlApp с помощью кода типа
xlWorkbook = Excel.Workbooks.OpenXML(filename)

и
xlApp = CreateObject("Excel.Application")

но это ни к чему не привело. И да добавил Я
Imports Excel = Microsoft.Office.Interop.Excel

с правильными рекомендациями.

Я открыт для любых предложений и буду признателен за любую помощь.
Спасибо

Richard MacCutchan

Вам нужно точно объяснить, какие ошибки вы получаете, и где они происходят. Если ошибки являются результатом плохих данных в текстовом поле, то вам нужно изучить эти данные, чтобы увидеть, что с ними не так.

Richard MacCutchan

И вы все еще не объяснили точно, где происходит исключение NullReferenceException.

LndM

Исключение NullReferenceException происходит в xlApp, как я уже писал, xlApp все еще ничего после того, как я инициализирую его с помощью нового Excel.Приложение, и ничего не остается, пока не возникнет проблема, когда я выйду из него в xlApp.Application.Quit(). Вопрос в том, почему он остается ничем, даже если я объявил его как приложение и использую open (), чтобы дать ему данные.

Richard MacCutchan

Скорее всего потому что заявление

xlApp = New Excel.Application

не создает новый объект приложения Excel. Вы уверены, что этот код скомпилирован чисто?

LndM

Нет, честно говоря, я ни в чем не уверен, почему он может быть нечистым? Но что создает объект приложения Excel, если не эта строка?

Richard MacCutchan

Извините, но я не могу ответить ни на один из этих вопросов. Но если это утверждение не имеет успеха, тогда определенно чего-то не хватает. Попробуйте перестроить код с максимальным количеством предупреждений, чтобы увидеть, не помечает ли компилятор что-нибудь.

2 Ответов

Рейтинг:
0

Fueled By Caffeine

Ваш xlApp никогда не инициализируется и всегда ничего не делает, поэтому при попытке использовать его VB выдает исключение NullReferenceException.

Добавьте строку 'xlApp = New Excel.Application()' после 'Try' инициализировать xlApp.

NullReferenceException-это очень распространенная ошибка, и вам нужно научиться ее отлаживать. В вашей IDE при работе в режиме отладки он должен выделить строку, на которой находится ошибка. Если вы затем наведете курсор мыши на переменные в этой строке, вы должны найти одну из них, на которую вы ссылаетесь, которая все еще не установлена - это будет причиной вашей проблемы.


LndM

Спасибо, я добавил строку, но это не помогает программе работать, так как она все еще ничего не делает после инициализированной строки.

Рейтинг:
0

Richard MacCutchan

Этот код работает для меня:

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
    Private Sub ButtonShow_Click(sender As Object, e As EventArgs) Handles ButtonShow.Click
        Dim CellValue As String
        Dim filename As String = LabelFilePath.Text
        If IO.File.Exists(filename) Then
            Dim xlApp As Excel.Application = Nothing
            Dim xlWorkbook As Excel.Workbook = Nothing
            Dim xlWorksheet As Excel.Worksheet = Nothing
            Dim xlRange As Excel.Range = Nothing
            Try
                xlApp = New Excel.Application
                xlWorkbook = xlApp.Workbooks.Open(filename)
                xlWorksheet = xlWorkbook.Sheets("Sheet1")
                Dim row = Int32.Parse(TextBoxRow.Text) ' NB a bad way to convert user input
                Dim col = Int32.Parse(TextBoxColumn.Text) ' ALWAYS use TryParse in live code
                xlRange = xlWorksheet.Cells(row, col)
                CellValue = xlRange.Value
                TextBoxCell.Text = CellValue

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                xlApp.Application.Quit()

            End Try
        End If

    End Sub
End Class

Не стесняйтесь вносить изменения по мере необходимости, хотя основная функциональность верна.