Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
6 / 6 / 0
Регистрация: 29.03.2011
Сообщений: 47
1

Считывание(запись) Excel в(из) массив структур

22.08.2019, 09:27. Показов 1180. Ответов 3
Метки нет (Все метки)

Добрый день. Подскажите пожалуйста как проще выполнить считывание данных с Excel и записать в массив структур
имею структуру

Visual Basic
1
2
3
4
5
6
7
8
9
10
Structure Spring
      
        Public name_spring As String
        Public number As ULong
        Public height_H0 As Decimal
        Public height_F1 As Decimal
        Public height As Double
        Public group As String
 
    End Structure

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim exc As Object
        Dim Spr_753() As Spring
        Dim record_date As Spring, Row_count As Integer
        OpenFileDialog1.ShowDialog()
        TextBox1.Text = OpenFileDialog1.FileName()
        exc = CreateObject("excel.application")
        exc.Workbooks.Open(OpenFileDialog1.FileName)
        exc.Worksheets("1.xlsx").Activate()
        Row_count = exc.Cells(exc.Rows.Count, 4).End(-4162).Row
        ReDim Spr_753(Row_count);
        ' и вот здесь пишу так
                For i As Integer = 2 to Row_count
                Spr_753(i).name_spring = exc.cells(i, 2).Value
                Spr_753(i).number = exc.cells(i, 4).Value
                Spr_753(i).height_H0 = exc.cells(i, 5).Value
                Spr_753(i).height_F1 = exc.cells(i, 6).Value
                Spr_753(i).height = exc.cells(i, 7).Value
                Spr_753(i).group = exc.cells(i, 8).Value
               Next 
           End Sub
' А хочется как то так
Visual Basic
1
Spr_753(i) = exc.Range( "A" & i & ":F" & i)
(но не работает)
' и еще хочется писать так
Visual Basic
1
record_date = Spr_753(i)
(и это не работает)


Что делаю не так? VB изучаю совсем недавно. IDE Visual Studio 2017
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2019, 09:27
Ответы с готовыми решениями:

Считывание и запись структур в бинарный файл
Здравствуйте, я делаю автоподгрузку и авто сохранение некоторой структуры в бинарный файл. И где-то...

Запись и считывание массива структур (документ XML)
Есть задание: Ресторан содержит список блюд. Создайте массив структур «Блюда», структура содержит...

Запись массива структур в бинарный файл и считывание его
Есть такая структура: struct table { public string name; public string...

Считывание из файла в массив структур
Доброго времени суток! Есть структура: struct iDiscipline{ char name; int num_course;...

3
-4 / 4 / 0
Регистрация: 21.09.2015
Сообщений: 333
09.09.2019, 15:35 2
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
Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        'Открыть новую книгу Excel
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        'Добавить данные в ячейки первого листа новой книги
        oSheet = oBook.Worksheets(1)
        oSheet.Visible = True 'Это свойство таблицы, если True - то она будет видна, если False 
        Dim D As Object = CreateObject("Excel.Application") 'Объявляем переменную D как объект Excel.
        Dim D1 As String = InputBox("путь к файлу:", , put + "note1.xlsx")
        If IO.File.Exists(D1) Then MsgBox("Файл существует")
 
        D.Workbooks.open(D1) 'Открываем книгу по указанному адресу для чтения
 
        D.Sheets(4).Activate() 'Активируем первый лист в книге (Если необходимо)
 
        For i = 1 To 160
            For j = 15 To 26
record_date=D.Cells(i, j - 14).value()
                D.Cells(i, j - 14).value() = Convert.ToString(record_date)
            Next j
        Next i
        D.Quit() ' Выход
чтение и запись я не догоняю зачем так усложнять ещё проект и добавьте и ссылку на Ecxel
0
252 / 193 / 49
Регистрация: 18.12.2015
Сообщений: 410
09.09.2019, 16:53 3
Импортируйте библиотеку Imports Microsoft.Office.Interop
И работайте с объектом Range. Там есть примеры.
0
3926 / 3135 / 752
Регистрация: 02.02.2013
Сообщений: 3,000
Записей в блоге: 2
09.09.2019, 23:01 4
На мой взгляд, в подобных задачах лучше вообще обходиться без Excel. Пример с использованием библиотеки SpreadsheetLight.dll.
Кликните здесь для просмотра всего текста
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
Imports SpreadsheetLight
'http://spreadsheetlight.com/download/
Public Class Form1
    Private tbData As DataTable
    Private fName As String
    Private Sub Read_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        fName = IO.Path.Combine(Application.StartupPath, "test1.xlsx")
        tbData = New DataTable("myTable")
        With tbData.Columns
            .Add(New DataColumn("nameSp", GetType(String)))
            .Add(New DataColumn("number", GetType(ULong)))
            .Add(New DataColumn("hH0", GetType(Decimal)))
            .Add(New DataColumn("hF1", GetType(Decimal)))
            .Add(New DataColumn("height", GetType(Double)))
            .Add(New DataColumn("group", GetType(String)))
        End With
        Using sl As SLDocument = New SLDocument(fName, "Лист1")
            'предполагается что данные на листе записаны единым блоком (других данных нет)
            Dim stats As SLWorksheetStatistics = sl.GetWorksheetStatistics()
            Dim stCol As Integer = stats.StartColumnIndex
            For row = stats.StartRowIndex To stats.EndRowIndex
                tbData.Rows.Add(sl.GetCellValueAsString(row, stCol), sl.GetCellValueAsUInt64(row, stCol + 1), _
                                sl.GetCellValueAsDecimal(row, stCol + 2), sl.GetCellValueAsDecimal(row, stCol + 3), _
                                sl.GetCellValueAsDouble(row, stCol + 4), sl.GetCellValueAsString(row, stCol + 5))
            Next
        End Using
        'посмотрим что получили
        DataGridView1.DataSource = tbData
    End Sub
    Private Sub Save_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If tbData Is Nothing Then Return
        'считанные выше данные записываем на второй лист того же файла (в виде таблицы)
        Dim stCol As Integer = 3, endCol As Integer = stCol + tbData.Columns.Count - 1
        Dim stRow As Integer = 3, endRow As Integer = stRow + tbData.Rows.Count
        Using sl As SLDocument = New SLDocument(fName, "Лист2")
            sl.ImportDataTable(stRow, stCol, tbData, True)
            Dim tb As SLTable = sl.CreateTable(stRow, stCol, endRow, endCol)
            tb.HasAutoFilter = False
            tb.SetTableStyle(SLTableStyleTypeValues.Medium3)
            sl.InsertTable(tb)
            sl.SaveAs(fName)
        End Using
    End Sub
End Class
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2019, 23:01

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

Excel много файлов, с++, считывание и запись
Здравствуйте, уважаемые форумчане. Я не сильно силен с работой с файлами в с++. Поэтому, прошу...

Считывание/запись ячейки в Excel - LibXL (C, CodeBlocks)
Скачал бесплатную версию библиотеки, установил, пытаюсь проверить простые примеры с главной сайта:...

Считывание данных из текствого файла и запись в EXCEL по столбцам
Добрый день! Подскажите, пожайлуста, как мне сделать средствами Delphi программу, которая будет...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.