0 / 0 / 1
Регистрация: 22.04.2012
Сообщений: 42

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

08.12.2014, 18:02. Показов 4640. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru