Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/41: Рейтинг темы: голосов - 41, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15

Запись данных в Excel в первую свободную ячейку

15.03.2016, 19:06. Показов 8398. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи!!!
Я новичек, поэтому сильно не ругайте и не переводите тему типа "вон там посмотри". Хотелось бы увидеть конкретный код.
Задача: есть два поля textbox1 и textbox2, кнопка button1 "Записать". Необходимо при нажатии кнопки выполнить запись из textbox1 и textbox2 в таблицу excel (например файл 1.xlsx). Причем textbox1 в столбец "В", а textbox2 в столбец "С", но в свободную строку (не заполненную), например 1, 2, 3 строки заполнены, а 4 пустая - так вот в нее!
Надеюсь понятно изложил.
Пожалуйста!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2016, 19:06
Ответы с готовыми решениями:

Выделить первую свободную ячейку в выделенной строке DataGridView
как выделить первую свободную ячейку в выделенной строке DataGridView на vb.net

Найти первую свободную ячейку в столбце и занести туда информацию о результатах прохождения теста
Имеется некая форма с вопросами в которой вписываем ответы и тыкаем "Проверить" (некий тест). После чего происходит расчет...

Как в первую свободную ячейку по столбцу B вставить формулу автосумму и растянуть её на всю строчку через VBA
Как в первую свободную ячейку по столбцу B вставить формулу автосумму и растянуть её на всю строчку через VBA Я пытался сделать вот...

34
 Аватар для Alex77755
11523 / 3810 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
16.03.2016, 00:38
Net тут
VBA не NET
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
16.03.2016, 06:46  [ТС]
Прошу прощения
Я имел ввиду Visual Basic из состава Visual Studio 2010!
Вопрос остается.
0
 Аватар для yutrans
141 / 124 / 50
Регистрация: 10.11.2011
Сообщений: 622
16.03.2016, 12:12
Данную тему нужно создавать в разделе Vb net Вам же ответили.
Посмотрите файл может пригодится . Подпилите под себя
Вложения
Тип файла: docx Перенос данных в Excel.docx (37.7 Кб, 53 просмотров)
0
6996 / 2894 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
16.03.2016, 12:15
А Visual Basic тут: https://www.cyberforum.ru/visual-basic/
0
997 / 356 / 135
Регистрация: 27.10.2006
Сообщений: 764
17.03.2016, 00:08
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
'Добавить ссылку на Microsoft.Office.Interop.Excel
'Меню Проект - Добавить ссылку... - слева выбрать Сборки - Расширения. В списке найти Microsoft.Office.Interop.Excel и поставить слева от неё галочку
 
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Public Class Form1
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim xlApp As New Excel.Application 'приложение Excel
        Dim xlWB As Excel.Workbook 'книга
        Dim xlSht As Excel.Worksheet 'лист
        Dim iLastRow As Integer 'числовая переменная
        Dim iFillFileName As String = String.Empty
 
        iFillFileName = "G:\VB.NET TEST\Book1.xlsx" 'путь к нашему Excel файлу
 
        Try
            xlWB = xlApp.Workbooks.Open(iFillFileName)
        Catch ex As Exception
            MessageBox.Show("Не удалось открыть файл " & iFillFileName, "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End Try
 
        Try
            xlSht = xlWB.Worksheets("Лист1") 'укажите имя листа 
        Catch ex As Exception
            MessageBox.Show("Не удалось найти указанный лист в файле " & iFillFileName, "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
            xlWB.Close(SaveChanges:=True) 'сохраняем файл и закрываем его
            xlApp.Quit() 'закрываем Excel
            Exit Sub
        End Try
 
 
        With xlSht
            iLastRow = .Cells(.Rows.Count, "B").End(XlDirection.xlUp).row 'номер последней заполненной строки в столбце B
            .Cells(iLastRow + 1, "B").value = Me.TextBox1.Text 'переносим данные из TextBox1 в ячейку столбца В
            .Cells(iLastRow + 1, "C").value = Me.TextBox2.Text 'переносим данные из TextBox2 в ячейку столбца С
        End With
 
        xlWB.Close(SaveChanges:=True) 'сохраняем файл и закрываем его
        xlApp.Quit() 'закрываем Excel
 
        'Закрытие Excel, чтобы он не весел в диспетчере задач
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
            xlApp = Nothing
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            GC.Collect()
        End Try
 
        MessageBox.Show("Данные в книгу Excel добавлены. Книга закрыта", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
 
End Class
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
17.03.2016, 21:15  [ТС]
Спасибо за ответ, но не работает! Данные не записываются!!!

Добавлено через 15 минут
Прошу прощения, сам тупанул! Все работает!!!
Вопрос в том, что если 1, 2, 3 и 5 строки заполнены, то запись происходит в 6 строку, а не в 4?
0
997 / 356 / 135
Регистрация: 27.10.2006
Сообщений: 764
17.03.2016, 21:22
Да, так как вот этой строкой

VB.NET Скопировано
1
iLastRow = .Cells(.Rows.Count, "B").End(XlDirection.xlUp).row
мы находим (идём снизу вверх, т.е. с миллионной строки до 1-й строки) заполненную (непустую) ячейку в столбце В и определяем номер её строки.

Т.е. если заполнены строки 1,2,10, то эта строка вернёт номер 10-й строки, а не 3-й.
Если это критично, то можно переписать код, чтобы он искал не снизу вверх, а сверху вниз
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
25.03.2016, 22:00  [ТС]
Спасибо, за ответы! Все работает!!!
Есть еще вопрос: как теперь сделать поиск по этим записям? Например, по столбцу B! Имеется кнопка и текстбар, вводим шифр в тасквар и нажимаем кнопку "Поиск". Результат должен выводиться на новой форме с показам всех строк?

Добавлено через 8 минут
Ссори, не правильно выразился: не всех строк, а всех столбцов найденной строки!!!
0
997 / 356 / 135
Регистрация: 27.10.2006
Сообщений: 764
25.03.2016, 22:26
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

А что у вас не получается? )

Добавьте на Form1 ещё одну кнопку (в моём коде Button2), по нажатию которой будет происходить поиск, добавьте ещё одно текстовое поле (в моём коде textbox3).
Добавьте в проект Form2 и поместите на неё 5 TextBox (Textbox1,Textbox2,Textbox3,Textbox4,Tex tbox5)

VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'кнопка Найти
        Dim xlApp As New Excel.Application 'приложение Excel
        Dim xlWB As Excel.Workbook = Nothing 'книга
        Dim xlSht As Excel.Worksheet = Nothing  'лист
        Dim iFillFileName As String = String.Empty
        Dim Rng As Excel.Range 'найденная ячейка
        Const xlFormulas = -4123 'искать только в формулах
        Const xlwhole = 1 'искать "Ячейка целиком"
        Const xlPart = 2 'искать "часть ячейки"
        Dim TextToFind As String = String.Empty
 
        If Me.TextBox3.Text = "" Then
            MessageBox.Show("Вы не указали текст для поиска!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
 
        TextToFind = Me.TextBox3.Text
 
        iFillFileName = "G:\VB.NET TEST\Book1.xlsx" 'путь к нашему Excel файлу
 
        If xlWB Is Nothing Then
            Try
                xlWB = xlApp.Workbooks.Open(iFillFileName)
            Catch ex As Exception
                MessageBox.Show("Не удалось открыть файл " & iFillFileName, "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End Try
 
            Try
                xlSht = xlWB.Worksheets("Лист1") 'укажите имя листа 
            Catch ex As Exception
                MessageBox.Show("Не удалось найти указанный лист в файле " & iFillFileName, "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
                xlWB.Close(SaveChanges:=True) 'сохраняем файл и закрываем его
                xlApp.Quit() 'закрываем Excel
                Exit Sub
            End Try
        End If
 
        With xlSht
            Rng = .Columns("B").find(TextToFind, , xlFormulas, xlwhole)
            If Rng Is Nothing Then
                MessageBox.Show("В столбце В не удалось найти текст: " & TextToFind, "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
 
            Form2.TextBox1.Text = .Cells(Rng.Row, "A").value
            Form2.TextBox2.Text = .Cells(Rng.Row, "B").value
            Form2.TextBox3.Text = .Cells(Rng.Row, "C").value
            Form2.TextBox4.Text = .Cells(Rng.Row, "D").value
            Form2.TextBox5.Text = .Cells(Rng.Row, "E").value
            Form2.Show()
        End With
 
        xlWB.Close(SaveChanges:=True) 'сохраняем файл и закрываем его
        xlApp.Quit() 'закрываем Excel
 
        'Закрытие Excel, чтобы он не весел в диспетчере задач
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
            xlApp = Nothing
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            GC.Collect()
        End Try
    End Sub
1
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
26.03.2016, 21:22  [ТС]
Спасибо, все работает!!!!!!
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
01.04.2016, 20:36  [ТС]
Блин! Похоже без знающих не обойтись!
Еще одно: все работает как надо, но не могу понять как сделать следующее, нахожу нужную строку, далее изменяю какие-либо данные в ней и затем нужно выполнить запись измененной строки взамен ранее открытой?
КАК?????
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
04.04.2016, 21:16
а как вы находите строку, как изменяете?
на моменте где нашли - сохраните/запомните координаты ячейки, после изменения верните данные обратно в эти координаты...
1
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
28.04.2016, 19:55  [ТС]
Возникла проблема: все сделал, протестировал, создал exe. Все работает. Переношу проект на другой комп, запускаю exe-шник, проект запускается. Нажимаю на кнопку открытия excel-файла и вылетает ошибка: невозможно прочитать файл с:\...........путь. Файл excel находится по указанному пути т.к. если его убрать, то вылетает ошибка: файл по указанному пути отсутствует!
В чем может быть проблема?
Пояснение: создавал прогу в винде 7, а тестирую в хр. Может ли это влиять?
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
29.04.2016, 11:26
путь какой? и есть ли права доступа к каталогу?
+ почему не сделать путь задаваемым либо чтобы обращался к файлу в той же папке, где сам exe
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
29.04.2016, 20:22  [ТС]
Путь к файлу с:\1.xls
Права к каталогу есть!!! Хочу в другой папке.
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
29.04.2016, 20:53
Версии Excel на компьютерах совпадают?
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
29.04.2016, 21:37  [ТС]
Создавал базу в офисе 2010, но сохранил для версий 2003-2007. Открываю в 2007.
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
29.04.2016, 21:50
Microsoft.Office.Interop.Excel, версия 14.0.0.0 для Excel 2010, версия 12.0.0.0 для Excel 2007 и т.д. Попробуйте установить Solution Explorer > Microsoft.Office.Interop.Excel > Property > Embed Interop Types=True или почитайте здесь https://msdn.microsoft.com/en-... 17478.aspx
0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 15
02.05.2016, 21:02  [ТС]
Проблема осталась!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2016, 21:02
Помогаю со студенческими работами здесь

Как дополнить программу копирования одновременным подсчетом суммы значений по столбцам в первую свободную ячейку внизу столбца?
Производится программное копирование диапазона ячеек с Листа1 в Лист2 (выборка из большой таблицы части значений). Значения ячеек -...

MS Office Excel VBA вставить скопированный ячейки в пустую свободную ячейку
Здравствуете, помоги не получается вставить скопированные ячейки на лист2 в этой же книги в первую пустую ячейку по столбцу А Вот такой...

Как сделать копирование определённой строчки в excel в другую книгу в первую свободную строчку с использованием макроса
Как сделать копирование определённой строчки в excel в другую книгу в первую свободную строчку с использованием макроса ...

Запись минимума массива в его первую ячейку
Суть задачи: Вводиться масcив из 10-ти елементов. Найти минимум и записать его в первую ячейку. Я составил код: procedure...

Копирование в следующую свободную ячейку
Имеется диапазон из 10 ячеек A1:A10. Туда цифры вносится вручную. Допустим в ячейке A11 подсчитывается некий разряд (для простоты назовем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер