Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42

Передача массива данных в Excel или создание двумерного динамического массива

08.12.2014, 18:02. Показов 4630. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел на просторах вот такое:
Visual Basic
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
Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
 
   'Открыть новую книгу Excel
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
 
   'Создать массив с 3 столбцами и 100 строками
   Dim DataArray(1 To 100, 1 To 3) As Variant
   Dim r As Integer
   For r = 1 To 100
      DataArray(r, 1) = "ORD" & Format(r, "0000")
      DataArray(r, 2) = Rnd() * 1000
      DataArray(r, 3) = DataArray(r, 2) * 0.7
   Next
 
   'Добавить заголовки в строку 1
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")
 
   'Передать массив на лист, начиная с ячейки A2
   oSheet.Range("A2").Resize(100, 3).Value = DataArray
   
   'Сохранить книгу и закрыть Excel
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit
В таком виде все прекрасно работает, но мне нужен либо двумерный динамический массив, либо 2 одномерных.
В таком виде уже ничего не работает:
Visual Basic
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
Private Sub Command1_Click()
Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
    Dim m
    Dim n
   
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
 
  
   Dim DataArray(m, 1)
   Dim r As Integer
   For r = 1 To 100
        ReDim Preserve DataArray(m, 0)
        DataArray(m, 0) = "ORD" & Format(r, "0000")
        ReDim Preserve DataArray(m, 1)
        DataArray(m, 1) = Rnd() * 1000
        m = m + 1
   Next
 
   
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")
 
   oSheet.Range("A2").Resize(m, n).Value = DataArray
   
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit
End Sub
А в таком виде в ексель во всех 100 ячейках один и тот же, первый элемент массива
Visual Basic
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
Private Sub Command1_Click()
Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
    
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
 
 
   Dim DataArray()
   Dim r As Integer
   For r = 1 To 100
        ReDim Preserve DataArray(m)
        DataArray(m) = Rnd() * 1000
        m = m + 1
   Next
 
  
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")
 
  
   oSheet.Range("A2").Resize(m).Value = DataArray
   
   
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2014, 18:02
Ответы с готовыми решениями:

Создание динамического двумерного массива по данным из Excel
Считываю xlsx файл и сохраняю его в: namespace OpenXMLExcel.SLExcelUtility { public class SLExcelStatus { public string...

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

Создание и заполнение двумерного массива из данных в excel
Есть 2 столбца в excel со значениями x и у. Известно, что данные записаны в столбцах A и B соответственно. Сколько строк неизвестно. ...

29
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
08.12.2014, 19:55
Студворк — интернет-сервис помощи студентам
И да, с выгрузкой чета не понимаю, чего не так
Visual Basic
1
  oSheet.Range("A2").Resize(m, 2).Value = oExcel.transpose(DataArray)
1
0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42
08.12.2014, 19:58  [ТС]
Аааааа, все, понял! Всем спасибо, вопрос закрыт!
0
0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42
22.12.2014, 19:17  [ТС]
Хорошо что тема еще не закрыта
Вопрос мелкий, новую создавать не стоит.
в общем вот:
Visual Basic
1
2
3
4
5
6
For i = 2 To k - 1
      x = x+ 1
   Set oSheet = oBook.Worksheets.Add()
   Set oSheet = oBook.Worksheets(x)
   oSheet.Range("B1").Value = "s1"
next i
Новые листы в книге создаются, но заполняется данными только лист 4 и данными которые соответствуют последнему элементу цикла
0
 Аватар для Апострофф
9912 / 3935 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
22.12.2014, 19:30
Цитата Сообщение от RNDPhoenix Посмотреть сообщение
Set oSheet = oBook.Worksheets(x)
нам отсюда не видно, что такое X, где и как объявлено?
0
0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42
22.12.2014, 19:38  [ТС]
Цитата Сообщение от Апострофф Посмотреть сообщение
нам отсюда не видно, что такое X, где и как объявлено?
обычный счетчик, не объявлял
0
 Аватар для Апострофф
9912 / 3935 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
22.12.2014, 19:42
Цитата Сообщение от RNDPhoenix Посмотреть сообщение
обычный счетчик, не объявлял
Тогда приведи полный код процедуры, а лучше модуля, а ещё лучше весь проект.
0
0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42
22.12.2014, 21:43  [ТС]
да тут модули большие.... Как можно вообще провернуть смену листов и заполнение в цикле?
0
 Аватар для Апострофф
9912 / 3935 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
22.12.2014, 21:53
Цитата Сообщение от RNDPhoenix Посмотреть сообщение
обычный счетчик, не объявлял
Значит
Visual Basic
1
Set oSheet = oBook.Worksheets(x)
каждый раз обращается к oBook.Worksheets(1) - другого объяснения не вижу...
0
0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42
22.12.2014, 22:13  [ТС]
в том то и дело, что обращается не к 1, а почему-то к 4, к первому листу, который создается
Visual Basic
1
Set oSheet = oBook.Worksheets.Add()
0
 Аватар для Апострофф
9912 / 3935 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
22.12.2014, 22:20
Цитата Сообщение от Апострофф Посмотреть сообщение
приведи полный код процедуры, а лучше модуля, а ещё лучше весь проект.
Или гадать будем дооолго.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2014, 22:20

Передача двумерного динамического массива в функцию
Как можно передать динамическую матрицу в функцию что бы при выходе из функции она оставила прежние значения?

Передача динамического двумерного массива в процедуру
Написал вот такой код для одномерного динамического массива #include <iostream> #include <clocale> using...

Передача динамического двумерного массива в функцию
Я сделал вот так: void PrintMatrix(int** matrix, int& n, int& m) { for (int i = 0; i < n; i++) { cout << "Row "...

Передача двумерного динамического массива в конструктор
Всем привет, задача. Произвольный многоугольник в двумерном пространстве». Данные класса: количество вершин, указатель на динамически...

Передача динамического двумерного массива через параметры
в такой вот простенькой программке: #include .. const n = 4; void ENTR(double pMas, char *file) { ifstream SMas(file); ...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru