Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > определение диапазона ячеек Excel в VB.Net


Автор: Panika 10.7.2009, 12:28
Помогите плиз!
мне нужно определить размер таблицы в Excel, т.е. адрес последней ячейки или диапазон ячеек.
в VB.Net не знаю синтаксис...
может есть книги поработе с Excel в VB.Net?
спасибо!  

Автор: diadiavova 10.7.2009, 14:29
Сразу вопрос: каким образом в код попадает ссылка на таблицу? 
Там всё довольно просто любой диапазон ячеек - это объект Range, при чём не важно одна ячейка, строка, столбец или таблица. Стало быть, получив ссылку на него можно извлечь любую ячейку в виде такого же объекта Range и вызвать свойство Address например. Приведу код на VBA, переложить на VB.Net я думаю не проблема. Если проблема - выложи, что у тебя уже есть, потому что не очень понятен вопрос(точнее его контекст)
Следующий код в экселе выводит имя последней ячейки из выделенного в данный момент диапазона.
Код

Sub ShowAddress()
    Dim r As Range
    Set r = Selection
    Dim c As Range
    Set c = r(r.Rows.Count, r.Columns.Count)
    MsgBox c.Address
End Sub

Автор: Panika 10.7.2009, 15:52
Задача: 
есть два файла Excel, нужно содержимое одного файла добавить в конец другого. Для этого мне надо определить размер первого и конец второго файла.
как видно из кода мне нужно определить две переменные row1 и column1 
код урезан выглядит примерно так:
Код


Public Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        
        Dim xlApp As New Excel.Application
        Dim xlWb1 As Excel.Workbook = xlApp.Workbooks.Open(path1)
        Dim xlWb2 As Excel.Workbook = xlApp.Workbooks.Open(path2)
        xlApp.Visible = True
       
        ' объявление первого файла
        Dim workbook1 As _Workbook = xlWb1
        Dim sheets1 As Sheets = workbook1.Worksheets
        Dim worksheet1 As _Worksheet = sheets1.Item(1)
        ' объявление второго файла
        Dim workbook2 As _Workbook = xlWb2
        Dim sheets2 As Sheets = workbook2.Worksheets
        Dim worksheet2 As _Worksheet = sheets2.Item(1)
        
        Dim i As Integer, a As Integer

        Dim row1 As Integer, column1 As Integer

        For a = 1 To row1
            For i = 1 To column1

                Dim xlRange As Excel.Range = worksheet1.Cells(a, i) ' определяем куда
                xlRange.Value2 = worksheet2.Cells(a, i) ' определяем откуда
                
            Next i
        Next a


        '
        Try
            workbook1.Close(True) ' можно указать путь и имя сохраняемого файла
            workbook2.Close(True)

            xlApp.Quit()
        Catch Outer As COMException
            Console.WriteLine("User closed Excel manually, so we don't have to do that")
        End Try

 End Sub



Автор: diadiavova 10.7.2009, 17:37
У класса Worksheet есть свойство UsedRange. Как следует из имени оно возвращает используемый диапазон.

Автор: Panika 13.7.2009, 08:04
diadiavova, Огромное спасибо!
То что надо!

Если бы ещё подсказали литературку на эту тему цены бы Вам не было!!!  smile 

Автор: diadiavova 13.7.2009, 09:49
С литературкой фиг знает, но думаю, что копать надо не в сторону решений VSTO, хотя и туда тоже, а скорее надо искать литературу по http://www.google.ru/search?hl=ru&rlz=1B3GGGL_ruRU325RU325&newwindow=1&q=vba+ebooks&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=lang_ru&aq=f&oq=. Там язык не слишком от VB.Net отличается, а вот объектная модель автоматизации офиса, как я полагаю лучше всего описана именно там.
Кроме того у нас есть http://forum.vingrad.ru/forum/msoffice-programming-development.html, там тоже можно спросит и насчёт литературы и конкретных фич, типа той о которой шла речь в этом топике.
Ну, а что до программирования офиса под платформой .Net - то в первую очередь http://msdn.microsoft.com/en-us/library/bb726434.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)