Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Запись в файлы Excel, Word, TXT Добавлено: 30.05.10 19:58  

Автор вопроса:  goodwen
Здраствуйте, раскажите кто знает, как содержимое любого массива записать в файл (текстового блокнота, или экселевского файла, или вордовского). Есть двумерный массив (абсолютно любой размерности и в каждой ячейке записано какое либо значение), как сделать пошагово так, что бы его содержимое записывалось в файл и потом при загрузке приложения автоматически считывалось обратно.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #1 Добавлено: 30.05.10 20:37
В текстовый файл тоже элементарно

а в ворде экселе у тебя всё само и должно быть, VBA как раз там и обитает :)

Ответить

Номер ответа: 2
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #2 Добавлено: 30.05.10 21:43
эт для экселя
  1. Option Base 1           'минимальный индекс массива не 0 а 1
  2.  
  3. Private Sub Worksheet_Activate()
  4.     Dim I() As Integer  'будущий двухмерный массив
  5.     Dim CtX As Integer  'текущий Х
  6.     Dim CtY As Integer  'текущий Y
  7.     Dim MxX As Integer  'максимальный Х
  8.     Dim MxY As Integer  'максимальный Y
  9.  
  10.     MxX = CInt(Rnd * 10)    'случайная ширина массива
  11.     MxY = MxX               'высота равна ширине
  12.  
  13.     ReDim I(MxX, MxY)       'ресайз массива
  14.  
  15.     For Y = 1 To MxY        'цикл по строкам массива
  16.         For X = 1 To MxX    'цикл по столбцам массива
  17.             I(X, Y) = CInt(Rnd * 10) 'присвоить случайное значение
  18.         Next
  19.     Next
  20.  
  21.     For Y = 1 To MxY
  22.         For X = 1 To MxX
  23.             Cells(Y, X) = I(X, Y) 'отобразить в ячейке соответствующее значение
  24.         Next
  25.     Next
  26. End Sub

Ответить

Номер ответа: 3
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #3 Добавлено: 30.05.10 21:55
А для ворда чуть геморнее, с предварительной установкой курсора в нужную ячейку

Ответить

Номер ответа: 4
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #4 Добавлено: 31.05.10 22:43
Спасибо Smith, как раз сейчас буду пробовать с экселевским файлом. Узнал, как в текстовый заносить и считывать, и появилась проблема. У меня вобщем програама разбивает введённый текст и заносит в лейбл, а потом содержимое лейбла в конкретную ячейку и так далее, и в лейбле и соответственно в ячейке массива есть chr(13) (там некоторые строки записаны с новой строки). в текстовый файл записывается и считывается, но он не понимает что такое Chr(13), и получается что при считывание выдаёт только первую строку до chr(13), а всё остально нет, как это можно исправить? и если в Экселевский файл записывать то тоже самое будет? Если да то как там можн оыбло бы это исправить?

Ответить

Номер ответа: 5
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #5 Добавлено: 31.05.10 23:10
Извиняюсь за невнимательность, незаметил где именно написал, у меня программа эта на VB6, а не на VBA, как в VB6 всё это можно решить?

Ответить

Номер ответа: 6
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #6 Добавлено: 01.06.10 12:12
Chr(13) должен понимать. Пробуй открыть полученный текстовый файл в блокноте. В экселе тоже самое не будет. На VB6 надо подключить библиотеку екселя или/и ворда с помощью раннего или позднего связывания. С ранним удобнее работать/отлаживать, но ексель будет запускаться каждый раз при запуске VB6 проги.

Ответить

Номер ответа: 7
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #7 Добавлено: 02.06.10 21:55
Открыл текстовый файл через WordPad и правда там понимает chr(13), но при считывание он каждую строчку заносит в разные ячейки, а нужно в одну, как это можно было бы исправить?

Ответить

Номер ответа: 8
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #8 Добавлено: 03.06.10 12:27
Для начала код с его описанием в студию. А то ни фига не понятно.

Ответить

Номер ответа: 9
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #9 Добавлено: 03.06.10 20:18
  1.  
  2. Dim s As Variant
  3. Dim b As Variant
  4. Dim p1, p2, p3, p4 'вопросы
  5. Dim s4et(1 To 69) 'счётчик для записи в новую ячейку массива
  6.  
  7. Dim mass(1 To 1000, 1 To 1000) 'массив куда всё заносится
  8.  
  9.  
  10. Private Sub Command1_Click()
  11. s = Text1.Text
  12. b = Split(s, " ", -1)
  13.  
  14. For i = LBound(b) To UBound(b)
  15. p1 = InputBox("{" + b(i) + "}" + "-это 1.объект или 2.действие?")
  16. If p1 = "1" Then
  17.  
  18. Label1.Caption = ""
  19.  
  20. Label1.Caption = Label1 + b(i) + "-это объект"
  21. p2 = InputBox("каких он размеров?" + Chr(13) + "1.большой" + Chr(13) + "2.маленький")
  22. If p2 = "1" Then Label1.Caption = Label1 & vbCrLf & " он большой"
  23. If p2 = "2" Then Label1.Caption = Label1 & vbCrLf & " он маленький"
  24.  
  25. mass(s4et(1), 1) = Label1.Caption 'в массив просто заносится содержимое лэйбла
  26.  
  27. Label3.Caption = Label3.Caption & "a(" & s4et(1) & ", 1) = " & mass(s4et(1), 1) & Chr(13) ' показывает содержимое элемента массива
  28.  s4et(1) = s4et(1) + 1 'счетчик для записи в новую ячейку
  29.  
  30. End If
  31.  
  32. If p1 = "2" Then
  33.  
  34. Label2.Caption = ""
  35.  
  36. Label2.Caption = Label2 + b(i) + "-это действие"
  37. p3 = InputBox("{" + b(i) + "}" + "какое оно по сложности?" + Chr(13) + "1. сложное" + Chr(13) + "2. простое")
  38. If p3 = "1" Then Label2.Caption = Label2 & vbCrLf & " оно сложное"
  39. If p3 = "2" Then Label2.Caption = Label2 & vbCrLf & " оно простое"
  40.  
  41. mass(s4et(2), 2) = Label2.Caption 'в массив просто заносится содержимое лэйбла
  42. Label3.Caption = Label3.Caption & "a(" & s4et(2) & ", 2) = " & mass(s4et(2), 2) & Chr(13) ' показывает содержимое элемента массива
  43. s4et(2) = s4et(2) + 1
  44. End If
  45.  
  46.  
  47.  
  48.  
  49. Next i
  50.   
  51. End Sub
  52.  
  53. Private Sub Form_Load()
  54. On Error GoTo no_txt 'на случай, если возникнет ошибка, например из-за того, что прога пущена впервые и файлов для
  55. 'открытия нет
  56.   Open App.Path & "\obj_s4et.txt" For Input As #1 'открывает файл счетчика объектов для чтения
  57.    Input #1, s4et(1) 'считывает значение счетчика объектов из файла
  58.   Close #1
  59.   
  60.   Open App.Path & "\act_s4et.txt" For Input As #1 'аналогично
  61.    Input #1, s4et(2)
  62.   Close #1
  63.  
  64.   Open App.Path & "\objects.txt" For Input As #1 'открывает файл с массивом объектов для чтения
  65.    For i = 1 To s4et(1) - 1 'поч. минус 1 - см ниже, в Form_Terminate, где про запись в файл
  66.     Line Input #1, mass(i, 1)
  67.     Label3.Caption = Label3.Caption & "a(" & i & ", 1) = " & mass(i, 1) & Chr(13) 'просто для проверки выводится на label3
  68.     
  69.    Next
  70.   Close #1
  71.   
  72.   Open App.Path & "\actions.txt" For Input As #1
  73.    For i = 1 To s4et(2) - 1
  74.     Line Input #1, mass(i, 2)
  75.     Label3.Caption = Label3.Caption & "a(" & i & ", 2) = " & mass(i, 2) & Chr(13)
  76.    Next
  77.   Close #1
  78.  
  79.  
  80. Text1.Text = ""
  81. Label1.Caption = ""
  82. Label2.Caption = ""
  83. Exit Sub
  84. no_txt:
  85.  
  86. s4et(1) = 1
  87. s4et(2) = 1
  88. End Sub
  89.  
  90.  
  91. Private Sub Form_Terminate() ' срабатывает при закрытии формы
  92.  
  93.   Open App.Path & "\obj_s4et.txt" For Output As #1 'открывает для записи файл счечтика объектов под №1 шоли
  94.    Write #1, s4et(1) 'пишет
  95.   Close #1
  96.   
  97.   Open App.Path & "\act_s4et.txt" For Output As #1 'аналогично для действия
  98.    Write #1, s4et(2)
  99.   Close #1
  100.  
  101.   Open App.Path & "\objects.txt" For Output As #1
  102.    For i = 1 To s4et(1) - 1 'пишет в файл значения массива объектов. Минус 1 - пушо например у тя введено 2 элт-а массива,
  103.    'значит счетчик = 3 (указывает проге, шо следующий эл-т массива будет 3им). А т.к. введено-то элтов тока 2, то потому
  104.    'и -1, шоб тут лишнюю пустую строку в файл не писало.
  105.    'Т.е. вкратце - строк на одну меньше, чем значение счетчика. Если счетчик равен 3, строк две
  106.    Print #1, mass(i, 1)
  107.    Next
  108.   Close #1
  109.   
  110.   Open App.Path & "\actions.txt" For Output As #1
  111.    For i = 1 To s4et(2) - 1 ' аналогично для массива действий
  112.    Print #1, mass(i, 2)
  113.    Next
  114.   Close #1
  115.  
  116. End Sub
  117.  


Это обрубленная и упращённая версия того, что хочу сделать.
При запуске формы, нужно набрать в текстовом поле что то вроде "Самолёт взлетел", или тому подобное. и вот ответить на пару вопросов, после чего содержимое лейблов, заносится в ячейку массива.
Заменил Chr(13) на vbCrLf и собсвтенно в файл он пишет, но при считывание он каждую строку заносит в разные ячейки, а не в одну как нада, как это можно исправить?

Ответить

Номер ответа: 10
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #10 Добавлено: 04.06.10 10:45
О каких ячейках речь? Массив или Label? В какую одну? Запустил форму - всё в лабел3 заносится при запуске.

упрОщённая от слова просто. нада писать надО.

Ответить

Номер ответа: 11
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #11 Добавлено: 05.06.10 17:32
GDK, Благодарю Вас за замечание. По поводу програмного кода, когда запускаете форму, в текстовом коде вводятся слова, после ответа на вопросы то, чтозаписано в лейблах 1 и 2 заносятся в ячейки массива и после этого на лейбл 3 выводится содержимое массива (это так для того, чтоб видеть занеслось, или нет), при закрытие формы, содержимое массива заносится в файл, а при новом открытии считывается с этого файла и для проверки (что считалось) выводится на лейбл 3, так что не особо понимаю, что Вас злит, но видимо я Вас просто запутал.

Ответить

Номер ответа: 12
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #12 Добавлено: 07.06.10 13:12
Почему решили что злит? Просто не понимаю вопроса. Т.е. не до конца понятно.
а при новом открытии считывается с этого файла

но при считывание он каждую строчку заносит в разные ячейки, а нужно в одну, как это можно было бы исправить?

Т.е. он считывавет в разные ячейки массива наверное. А нужно в какую-то одну. В какую?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам