Excel выгрузить все значения

Выгрузить строки на новый лист по определённым параметрам.

МЕХАНИЗМ

Дата: Суббота, 25.11.2017, 11:31 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
20% ±


Excel 2013

Привет всем!

Имеется длинная выгрузка данных по продажам, блоками (Лист1). В полях «Логин» содержатся имена продавцов, блоки вперемешку. А мне нужно каким-то образом выгрузить блоки от конкретного продавца на отдельный лист. Дополнительная сложность в том, что все блоки разные по размеру. Также у нас есть лист, где указано какому продавцу соответствуют какие ID блоков (уникальные) (Лист2).

Как я это вижу:
Вводим в ячейку «А15» логин продавца, который нам нужен. Затем жмём на кнопку макроса — и нужные блоки копируются на новый лист.

Или — хотя бы через формулы, поиск и пр. чтобы определённые блоки (с заданным логином) отображались на другом листе.

Никак не могу сообразить, как это сделать всё. :( Помогите, пожалуйста.

К сообщению приложен файл:

2214624.xlsx
(15.1 Kb)

Сообщение отредактировал МЕХАНИЗМСуббота, 25.11.2017, 11:33

 

Ответить

_Igor_61

Дата: Понедельник, 27.11.2017, 00:32 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

Здравствуйте! Кажется, что-то как-то получилось, :) проверяйте:

К сообщению приложен файл:

9155702.xlsm
(29.7 Kb)

 

Ответить

МЕХАНИЗМ

Дата: Среда, 29.11.2017, 11:44 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
20% ±


Excel 2013

Спасибо огромное за труды, но на реальной выгрузке возникли проблемы. :( Я пока пытаюсь понять, что ему не нравится.

А ты не мог бы вкратце описать логику работы макроса? Я не очень понял, что ему важно.

Вроде сперва начинает выгружать, потом начинает зависать и выдаёт ошибку, Run-time error 28. Лист создаётся, сперва идут блоки с нужными логинами, а потом начинается всё вперемешку. Причём, на короткой, неполной выгрузке всё работает.

Сообщение отредактировал Serge_007Среда, 29.11.2017, 17:21

 

Ответить

_Igor_61

Дата: Среда, 29.11.2017, 12:23 |
Сообщение № 4

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

Не знаю, нужно файл посмотреть — может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
[moder]И обоим замечание за нарушение Правил форума получить тогда тоже можно[/moder]

Сообщение отредактировал _Boroda_Среда, 29.11.2017, 12:38

 

Ответить

_Boroda_

Дата: Среда, 29.11.2017, 12:39 |
Сообщение № 5

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

_Igor_61,
Это что за безобразие?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

_Igor_61

Дата: Среда, 29.11.2017, 12:43 |
Сообщение № 6

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

А как нужно поступать в таких случаях? Если файл большой? Сюда нельзя, на яндекс-диск или облако нельзя (сторонний ресурс), на почту тоже нельзя. А как можно?

 

Ответить

МЕХАНИЗМ

Дата: Среда, 29.11.2017, 12:51 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
20% ±


Excel 2013

Не знаю, нужно файл посмотреть — может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)

Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?

 

Ответить

МЕХАНИЗМ

Дата: Среда, 29.11.2017, 12:53 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
20% ±


Excel 2013

Не знаю, нужно файл посмотреть — может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)

Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?

 

Ответить

_Igor_61

Дата: Среда, 29.11.2017, 13:09 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

Ну да, если делать перебор обычным циклом по листу, из-за большого количества строк вполне возможны тормоза. Но более конкретно можно будет сказать, увидев проблемный файл.

 

Ответить

_Boroda_

Дата: Среда, 29.11.2017, 13:18 |
Сообщение № 10

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

А как нужно поступать в таких случаях?

Сохранить в xlsb, заархиваровать, опытным путем найти номер строки, где перестает работать и положить именно этот блок (и по паре выше-ниже его) сюда, да куча вариантов еще

Ну и в макросе (особо не вникал, что первое бросилось в глаза) убрать рекурсию. Просто цикл сделайте не с 3 по iCount, а наоборот с шагом -1
[vba]

Код

Sub Del_Shapka()
    Dim i, iCount
    iCount = Cells(Rows.Count, 5).End(xlUp).Row
  For i = iCount To 3 Step -1
   If Cells(i, 5) = «Логин» Then
      Rows(i).Delete shift:=xlUp
‘      Del_Shapka
   End If
Next i
End Sub

[/vba]

Самый крайний случай — письмо админу с просьбой временно снять ограничение. Но это только если совсем уж никак

А, подождите, я Вам уже делал замечание по этому пункту. Потом снял.
http://www.excelworld.ru/forum/2-35197-231382-16-1505111416
Вы там писали

а насчет правил — буду стараться быть внимательней

Извинете, но вот теперь уж точно ловите замечание — Правила для всех одинаковы


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

_Igor_61

Дата: Среда, 29.11.2017, 14:00 |
Сообщение № 11

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

_Boroda_, спасибо! :)

 

Ответить

_Boroda_

Дата: Среда, 29.11.2017, 14:22 |
Сообщение № 12

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS


За рекурсию? Всегда рад
За замечание? Аналогично


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

_Igor_61

Дата: Среда, 29.11.2017, 14:41 |
Сообщение № 13

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

:)
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет

уже делал замечание по этому пункту

— там было за сторонний ресурс, а сейчас — за почту, так что я не повторил прежнее нарушение, а разнообразил новым :)

 

Ответить

ВладимирG

Дата: Среда, 29.11.2017, 14:58 |
Сообщение № 14

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 136


Репутация:

22

±

Замечаний:
0% ±


2007

[vba]

Код

Sub FindArea()
Dim name As String, x As Range, Adr&, kStr&, arr As Range, off&
name = Application.InputBox(«Введите имя», «Имя продажника», «», 2)
Application.ScreenUpdating = 0
Set x = Columns(5).Find(name, , xlValues, xlWhole)
If Not x Is Nothing Then
    Adr = x.Row
    Do
        kStr = Cells(x.Row, 1).MergeArea.Count + 1
        Set arr = Cells(x.Row — 1, 1).Resize(kStr, 10)
        arr.Copy
        With Sheets(2).Range(«D1»).Offset(off)
            .PasteSpecial Paste:=xlPasteFormats
            .Resize(kStr, 10) = arr.Value
        End With
        Application.CutCopyMode = False
        off = off + kStr
        Set x = Columns(5).FindNext(x)
    Loop While Not x Is Nothing And Adr <> x.Row
End If
Application.ScreenUpdating = 1
End Sub

[/vba]

Сообщение отредактировал ВладимирGСреда, 29.11.2017, 17:11

 

Ответить

МЕХАНИЗМ

Дата: Среда, 29.11.2017, 16:39 |
Сообщение № 15

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
20% ±


Excel 2013

За рекурсию? Всегда рад
За замечание? Аналогично

Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет

Попробовал, ошибка пропала. Но всё равно, результат тот же, выгружает вперемешку. Прислать полный файлик я не могу, это запрещено. Я могу только создать пример, похожий на неё. А потом уже самостоятельно перенести результат туда. Но на коротком примере всё получается, даже в выгрузке. Непонятно почему.

ВладимирG, а вот это, похоже, работает. Но вопрос, а как добавить сюда, чтобы выгружалось с сохранением форматирования? Сейчас выгружается просто текст.

К сообщению приложен файл:

6050796.xlsx
(15.1 Kb)

 

Ответить

ВладимирG

Дата: Среда, 29.11.2017, 17:12 |
Сообщение № 16

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 136


Репутация:

22

±

Замечаний:
0% ±


2007

Пост № 14 обновлён.

 

Ответить

Как мы все знаем, Microsoft Excel – очень полезная и популярная рабочая книга, которую пользователи могут хранить любые важные данные.

В Microsoft Excel пользователи могут выполнять несколько различных типов задач, таких как автоматически переносить данные с одного листа Excel на другой, обновлять один лист Excel с другого листа , копировать данные с одного листа на другой в Excel и т. д. для удобства.

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

Итак, просто внимательно просмотрите этот блог.

Содержание

  1. Практический сценарий
  2. Методы передачи данных из одной книги Excel в другую
  3. Метод № 1: автоматически Обновление одного листа Excel с другого листа
  4. Метод № 2: обновить электронную таблицу Excel данными из другой электронной таблицы
  5. Метод № 3: Как автоматически скопировать данные из одной ячейки в другую в Excel
  6. Метод № 4: Как скопировать данные с одного листа на другой в Excel с помощью формулы
  7. Метод № 5: копирование данных с одного листа на другой в Excel с помощью макросов
  8. Рекомендуемое решение: средство восстановления и восстановления MS Excel
  9. Шаги по использованию средства восстановления и восстановления MS Excel:
  10. Заключение:
  11. Маргрет
  12. MicroKnowledge, Inc.
  13. Приведенные ниже шаги объясняют, как настроить это с помощью Excel 2007 или более поздней версии.

Практический сценарий

Хорошо, сначала я должен упомянуть, что я полный любитель когда дело доходит до превосходства. У меня нет опыта работы с VBA или макросами, поэтому, если вы не уверены, знаю ли я что-то еще, вероятно, не знаю.

У меня есть рабочая тетрадь с 6 листами внутри; один из листов – мастер; это просто остальные 6 листов, составленные в один большой. Мне нужно настроить его так, чтобы любые новые данные, введенные в новые отдельные листы, автоматически вводились в мастер-лист в первой пустой строке.

Столбцы не одинаковы на всех листах. . Надеюсь, здесь профи будет легче, чем мне, в этом я бился головой о стену. Я буду тщательно проверять эту ветку, поэтому, если вам понадобится дополнительная информация, просто дайте мне знать …

Заранее благодарим за любую помощь.

Источник: https://ccm.net/forum/affich-1019001-automatically-update-master-worksheet-from- другие рабочие листы

Методы передачи данных из одной книги Excel в другую

Существует множество различных способов переноса данных из одной книги Excel в другую , и они следующие:

Метод № 1: автоматически Обновление одного листа Excel с другого листа

В книге MS Excel мы можем легко обновить данные, связав один лист с другим. Эта ссылка известна как динамическая формула, которая автоматически передает данные из одной книги Excel в другую .

Одна книга Excel называется источником рабочий лист , где эта ссылка автоматически переносит данные рабочего листа, а другая книга называется целевым листом , в котором он автоматически обновляет данные рабочего листа и содержит формулу связи.

Ниже приведены две разные точки для связывания Excel. данные книги для автоматических обновлений.

1) С использованием функции копирования и вставки

  • В исходный лист, выберите и скопируйте данные, которые вы хотите связать на другом листе.
  • Теперь на целевом листе Вставьте данные, к которым вы связали исходный лист ячейки.
  • После этого выберите меню Вставить ссылку из Другие параметры вставки в книге Excel

  • Сохраните всю свою работу из исходного рабочего листа перед его закрытием.

2) Введите формулу вручную

  • Откройте целевой рабочий лист, коснитесь ячейки, в которой есть формула связи, и поместите знак равенства (=) поперек нее.
  • Теперь перейдите к источник ш eet и коснитесь ячейки, в которой есть данные. нажмите Enter на клавиатуре и сохраните свои задачи.

Примечание- Всегда помните одну вещь, что формат исходного рабочего листа и конечный рабочий лист одинаковы.

Метод № 2: обновить электронную таблицу Excel данными из другой электронной таблицы

Чтобы обновить электронные таблицы Excel данными из другой электронной таблицы, просто следуйте приведенным ниже пунктам, которые будут применимы к версии Excel 2019, 2016, 2013, 2010, 2007.

  • Сначала перейдите в меню Данные .
  • Выберите параметр Обновить все

  • Здесь вы должны увидеть, когда и как обновляется соединение
  • Теперь щелкните любую ячейку, содержащую подключенные данные.
  • Снова в меню Данные , cli ck на стрелке рядом с параметром Обновить все и выберите Свойства соединения

  • После этого в меню Использование установите параметры которые вы хотите изменить.
  • На вкладке Использование установите любые параметры, которые вы хотите изменить.

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

Метод № 3: Как автоматически скопировать данные из одной ячейки в другую в Excel

Чтобы скопировать данные из одной ячейки в другую в Excel, просто выполните следующие пункты, указанные ниже:

  • Сначала откройте исходный рабочий лист и целевой рабочий лист.
  • На исходном листе перейдите к листу, который вы хотите переместить или скопировать.
  • Теперь нажмите меню Главная и выберите параметр Формат .
  • Затем выберите «Переместить или скопировать лист» в разделе «Организовать листы».
  • После этого снова в в меню Главная выберите параметр Формат в группе ячеек.
  • Здесь в Переместить или скопировать выберите целевой лист, и Excel отобразит только открытые листы в списке.

  • Иначе, если вы хотите скопировать рабочий лист вместо перемещения, сделайте копию книги Excel перед

  • Наконец, нажмите ОК кнопку, чтобы скопировать или переместить целевую электронную таблицу Excel.

Метод № 4: Как скопировать данные с одного листа на другой в Excel с помощью формулы

Вы можете копировать данные с одного листа на другой в Excel с помощью формулы . Вот шаги, которые необходимо выполнить:

  • Для копирования и вставки ячейки Excel в текущий рабочий лист Excel, , например; скопируйте ячейку От A1 до D5, вы можете просто выбрать целевую ячейку D5, затем ввести = A1 и нажать клавишу Enter, чтобы получить значение A1.
  • Для копирования и вставки ячеек с одного рабочего листа на другой, например скопируйте ячейку A1 листа Sheet1 в ячейку D5 листа Sheet2, выберите ячейку D5 на листе Sheet2, затем введите = Sheet1! A1 и нажмите клавишу Enter, чтобы получить значение.

Метод № 5: копирование данных с одного листа на другой в Excel с помощью макросов

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

  • Правильно сохраняйте расширение файла в вашу книгу Excel.
  • Не обязательно, чтобы ваша электронная таблица имела поддержку макросов для выполнения этой задачи.
  • Код Выбранные вами файлы также могут быть сохранены на другом листе.
  • Поскольку коды уже указывают детали, нет необходимости сначала активировать книгу или ячейки Excel.
  • Таким образом, ниже приведен код для выполнения этой задачи.

Sub OpenWorkbook ()
‘Открыть книгу
‘Метод открытия требует ссылки на полный путь к файлу.
Workbooks.Open «C: Users username Documents New Data.xlsx»

‘ Метод открытия имеет дополнительные параметры
‘Workbooks.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

End Sub

Sub CloseWorkbook ()
‘Закройте книгу
Workbooks («New Data.xlsx»). Close SaveChanges: = True
‘Метод Close имеет дополнительные параметры
‘ Workbooks.Close (SaveChanges, Filename, RouteWorkbook)

End Sub

Рекомендуемое решение: средство восстановления и восстановления MS Excel

Когда вы выполняете свою работу в MS Excel и по ошибке или случайно делаете это не сохранять данные книги, иначе ваш рабочий лист будет удален, тогда у нас есть для вас профессиональный инструмент восстановления, например MS Excel Repair & Recovery Tool .

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

Шаги по использованию средства восстановления и восстановления MS Excel:

Заключение:

Ну, я старался изо всех сил, чтобы предоставить наилучшие возможные способы автоматической передачи данных с одного листа Excel на другой. Итак, с этого момента вы не можете нужно беспокоиться о как автоматически копировать данные из одной ячейки в другую в Excel.

Я надеюсь, что вы удовлетворены приведенными выше методами, предоставленными вам по обновлению листа Excel .

Таким образом, используйте их правильно, и в будущем, если вы захотите узнать об этом, вы можете воспользоваться помощью указанных решений.

Маргрет

Маргрет Артур – предприниматель и эксперт по контент-маркетингу. Она ведет технические блоги и специализируется на MS Office, Excel и других технических вопросах. Ее отличительное искусство подачи технической информации простым для понимания языком очень впечатляет. Когда не пишет, она любит незапланированные путешествия.



MicroKnowledge, Inc.

Excel имеет отличный, недостаточно используемый способ извлечения данных из мастер-листа и записи подмножеств этих данных на других листах. Таким образом, Excel может действовать как функциональная база данных с помощью компонента под названием Microsoft Query.

Предположим, у меня есть сводная таблица всех вопросов технической поддержки, заданных в 2013 году, со столбцом под названием Назначено Кому.

Теперь мне нужны три отдельных листа, по одному для каждого представителя службы поддержки в столбце« Кому назначено », которые будут содержать только билеты службы поддержки этого человека. Но в дополнение к этому мне нужно следующее, чтобы быть возможно:

  • Новые данные, добавленные в основной лист, будут автоматически заполняться на соответствующих подмножествах листов.
  • Мастер-лист можно сортировать и фильтровать сам по себе, не затрагивая подмножества листов.
  • Функции и диаграммы, анализирующие данные на любом листе, должны автоматически подстраиваться под новые данные.

Звучит сложно? Это не так!

Приведенные ниже шаги объясняют, как настроить это с помощью Excel 2007 или более поздней версии.

(Эта функция также доступна в предыдущих версиях Excel. )

  1. Создайте все нужные листы в книге. Здесь я создал лист для каждого представителя службы поддержки.
  2. Создайте именованный диапазон для своей главной таблицы. Выделите данные в своей таблице (включая заголовки), введите e введите имя диапазона в поле имени слева от строки формул, затем нажмите Enter. Именованный диапазон необходим Microsoft Query для выбора данных для анализа.
  3. Создайте таблицу из вашей главной таблицы. Выделите свои данные, как описано выше. Откройте вкладку Вставить . Щелкните Таблица . Этот шаг немного избыточен, но преобразование ваших данных в таблицу имеет массу преимуществ, главное из которых состоит в том, что при добавлении в нее новых данных она автоматически расширяется для сбора новых данных. В свою очередь, это также автоматически расширит ваш именованный диапазон.
  4. Перейдите на лист, на который вы хотите поместить результаты запроса. Это может быть другой рабочий лист или даже другая книга.
  5. Щелкните вкладку Данные . Нажмите Из других источников . Выберите Из Microsoft Query . Откроется окно Выбрать источник данных .
  6. Выберите файлы Excel. Нажмите ОК . Откроется окно Выбрать книгу .
  7. Найдите и выберите книгу для запроса. Обратите внимание, что это может быть та же книга, что и открытая в данный момент. Нажмите ОК . Отображается Мастер запросов .
  8. Должны появиться ваши именованные диапазоны в левой части окна в виде таблицы. Я выберу все столбцы слева, чтобы показать их на листах подмножества. Щелкните Далее .
  9. На шаге мастера «Фильтровать данные» выберите фильтрацию данных, которые вы хотите отобразить на этом листе. Здесь я делаю лист Джерри, поэтому мне нужны только данные, где Назначено равно Джерри. Нажмите Далее .
  10. Выполните оставшиеся шаги в мастера, пока вы не будете готовы выбрать место назначения для ваших данных. В диалоговом окне Импорт данных убедитесь, что Таблица выбрана в качестве способа вставки ваших данных.. Я решил вставить данные в A1 на листе Джерри.
  11. Поскольку вы вставили данные в качестве таблицы у вас есть особая возможность Обновить, если вы вносите какие-либо изменения в основную таблицу. Вы можете найти Обновить на вкладке «Данные» или на вкладке «Работа с таблицами» Дизайн .

Вам понадобится повторить шаги 4–11 для каждого имеющегося у вас подмножества листов. Но как только все это настроено, у вас есть небольшая симпатичная база данных Excel!

На чтение 9 мин Просмотров 26.7к. Опубликовано 09.11.2017

MS Excel давно стал стандартом для работы с электронными таблицами. В статье рассматриваются способы программной выгрузки и загрузки из 1С в файлы Excel.

Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.

Содержание

  1. Обмен через табличный документ
  2. Обмен через OLE
  3. Использование COMSafeArray
  4. Обмен через ADO
  5. Выгрузка без программирования

Обмен через табличный документ

Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:

  • Записать(<ИмяФайла>, <ТипФайлаТаблицы>) для выгрузки данных в файл;
  • Прочитать(<ИмяФайла>, <СпособЧтенияЗначений>) для загрузки данных из файла.

Внимание!

Метод Записать() доступен как на клиенте, так и на сервере. Метод Прочитать() доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.


Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:

ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);

Здесь ТабДок — сформированный табличный документ, ПутьКФайлу — имя файла для выгрузки, ТипФайлаТабличногоДокумента.XLSX — формат создаваемого файла. Поддерживаются следующие форматы Excel:

  • XLS95 — формат Excel 95;
  • XLS97 — формат Excel 97;
  • XLSX — формат Excel 2007.

Загрузка из файла осуществляется также достаточно просто:

ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);

Здесь ПутьКФайлу — путь к загружаемому файлу Excel. СпособЧтенияЗначенийТабличногоДокумента.Значение определяет, каким образом нужно интерпретировать данные, считываемые из исходного документа. Доступны варианты:

  • Значение;
  • Текст.

Обмен через OLE

Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:

  • На компьютере конечного пользователя, если обмен происходит на стороне клиента;
  • На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.

Пример выгрузки:

// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Отключение вывода предупреждений и вопросов
Эксель.DisplayAlerts = Ложь;
// Создание новой книги
Книга = Эксель.WorkBooks.Add();
// Позиционирование на первом листе
Лист = Книга.Worksheets(1);

// Запись значения в ячейку
Лист.Cells(НомерСтроки, НомерКолонки).Value = ЗначениеЯчейки;

// Сохранение файла
Книга.SaveAs(ИмяФайла);

// Закрытие Эксель и освобождение памяти
Эксель.Quit();
Эксель = 0;

Примеры чтения:

// —— ВАРИАНТ 1 ——

// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Открытие книги
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
// Позиционирование на нужном листе
Лист = Книга.Worksheets(1);

// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;

// Закрытие книги
Книга.Close(0);

// Закрытие Эксель и освобождение памяти
Эксель.Quit();
Эксель = 0;

// —— ВАРИАНТ 2 ——

// Открытие книги
Книга = ПолучитьCOMОбъект(ПутьКФайлу);
// Позиционирование на нужном листе
Лист = Книга.Worksheets(1);

// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;

// Закрытие книги
Книга.Application.Quit();

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

// —— ВАРИАНТ 1 ——
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
КонецЦикла;

// —— ВАРИАНТ 2 ——
НомерСтроки = 0;
Пока Истина Цикл
НомерСтроки = НомерСтроки + 1;
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Если НЕ ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:

ВсегоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;

Область = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок));
Данные = Область.Value.Выгрузить();

В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:

Действие Код Комментарий
Работа с приложением
Установка видимости окна приложения Эксель.Visible = Ложь;
Установка режима вывода предупреждений (выводить/не выводить) Эксель.DisplayAlerts = Ложь;
Закрытие приложения Эксель.Quit();
Работа с книгой
Создание новой книги Книга = Эксель.WorkBooks.Add();
Открытие существующей книги Книга = Эксель.WorkBooks.Open(ИмяФайла);
Сохранение книги Книга.SaveAs(ИмяФайла);
Закрытие книги Книга.Close(0);
Работа с листом
Установка текущего листа Лист = Книга.WorkSheets(НомерЛиста);
Установка имени Лист.Name = Имя;
Установка защиты Лист.Protect();
Снятие защиты Лист.UnProtect();
Установка ориентации страницы Лист.PageSetup.Orientation = 2; 1 — книжная, 2 — альбомная
Установка левой границы Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);
Установка верхней границы Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры);
Установка правой границы Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры);
Установка нижней границы Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры);
Работа со строками, колонками, ячейками
Установка ширины колонки Лист.Columns(НомерКолонки).ColumnWidth = Ширина;
Удаление строки Лист.Rows(НомерСтроки).Delete();
Удаление колонки Лист.Columns(НомерКолонки).Delete();
Удаление ячейки Лист.Cells(НомерСтроки, НомерКолонки).Delete();
Установка значения Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Объединение ячеек Лист.Range(Лист.Cells(НомерСтроки, НомерКолонки), Лист.Cells(НомерСтроки1, НомерКолонки1)).Merge();
Установка шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Name = ИмяШрифта;
Установка размера шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Size = РазмерШрифта;
Установка жирного шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Bold = 1; 1 — жирный шрифт, 0 — нормальный
Установка курсива Лист.Cells(НомерСтроки, НомерКолонки).Font.Italic = 1; 1 — курсив, 0 — нормальный
Установка подчеркнутого шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Underline = 2; 2 — подчеркнутый, 1 — нет

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

Использование COMSafeArray

При выгрузке больших объемов данных из 1С в Excel для ускорения можно использовать объект COMSafeArray. Согласно определению из синтакс-помощника, COMSafeArray — объектная оболочка над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями по технологии OLE.

// Создание COMSafeArray
МассивКом = Новый COMSafeArray(«VT_Variant», ВсегоКолонок, ВсегоСтрок);
// Заполнение COMSafeArray
Для Стр = 0 По ВсегоСтрок1 Цикл
Для Кол = 0 По ВсегоКолонок1 Цикл
МассивКом.SetValue(Кол, Стр, Значение);
КонецЦикла;
КонецЦикла;
// Присвоение области листа Excel значений из COMSafeArray
Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).Value = МассивКом;

Обмен через ADO

Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.

Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.

Пример выгрузки:

// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection»);

// Установка строки соединения
Соединение.ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
Соединение.Open(); // Открытие соединения

// Создание COM-объекта для команды
Команда = Новый COMОбъект(«ADODB.Command»);
Команда.ActiveConnection = Соединение;

// Присвоение текста команды для создания таблицы
Команда.CommandText = «CREATE TABLE [Лист1] (Колонка1 char(255), Колонка2 date, Колонка3 int, Колонка4 float)»;
Команда.Execute(); // Выполнение команды

// Присвоение текста команды для добавления строки таблицы
Команда.CommandText = «INSERT INTO [Лист1] (Колонка1, Колонка2, Колонка3, Колонка4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)»;
Команда.Execute(); // Выполнение команды

// Удаление команды и закрытие соединения
Команда = Неопределено;
Соединение.Close();
Соединение = Неопределено;

Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:

// Создание COM-объекта для работы с книгой
Книга = Новый COMОбъект(«ADOX.Catalog»);
Книга.ActiveConnection = Соединение;

// Создание COM-объекта для работы со структурой данных на листе
Таблица = Новый COMОбъект(«ADOX.Table»);
Таблица.Name = «Лист1»;
Таблица.Columns.Append(«Колонка1», 202);
Таблица.Columns.Append(«Колонка2», 7);
Таблица.Columns.Append(«Колонка3», 5);
Таблица.Columns.Append(«Колонка4», 5);

// Создание в книге листа с описанной структурой
Книга.Tables.Append(Таблица);
Таблица = Неопределено;
Книга = Неопределено;

В приведенном примере в методе

Таблица.Columns.Append(«Колонка1», 202);

во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:

  • 5 — adDouble;
  • 6 — adCurrency;
  • 7 — adDate;
  • 11 — adBoolean;
  • 202 — adVarWChar;
  • 203 — adLongVarWChar.

Пример чтения:

// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection»);

// Установка строки соединения
Соединение.ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
Соединение.Open(); // Открытие соединения

// Создание COM-объекта для получения выборки
Выборка = Новый COMОбъект(«ADODB.Recordset»);
ТекстЗапроса = «SELECT * FROM [Лист1$]»;

// Выполнение запроса
Выборка.Open(ТекстЗапроса, Соединение);

// Обход результата выборки
Пока НЕ Выборка.EOF() Цикл
ЗначениеКолонки1 = Выборка.Fields.Item(«Колонка1»).Value; // Обращение по имени колонки
ЗначениеКолонки2 = Выборка.Fields.Item(0).Value; // Обращение по индексу колонки
Выборка.MoveNext();
КонецЦикла;

Выборка.Close();
Выборка = Неопределено;
Соединение.Close();
Соединение = Неопределено;

В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:

  • YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
  • NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.

В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:

  • Connection;
  • Command;
  • Recordset;
  • Record;
  • Fields;
  • Stream;
  • Errors;
  • Parameters;
  • Properties.

Выгрузка без программирования

Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.

Для сохранения табличного документа (например, результата отчета) можно вызвать команду Сохранить или Сохранить как… главного меню.

Сохранение табличного документа 1С

В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.

Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:

  1. Вывести данные в табличный документ при помощи команды Еще ⇒ Вывести список…;
  2. Сохранить табличный документ в требуемый формат.

Сохранение динамического списка

Таблица в Excel – это сложный массив с множеством параметров. Он может состоять из значений, текстовых ячеек, формул и быть отформатирован разными способами (ячейки могут иметь определенное выравнивание, цвет, направление текста, специальные пометки и т.п.).

При копировании таблицы иногда требуется перенести не все ее элементы, а только некоторые. Рассмотрим, как это можно сделать.

Специальная вставка

Очень удобно выполнять перенос данных таблицы с помощью специальной вставки. Она позволяет выбрать только те параметры, которые нам необходимы при копировании. Рассмотрим пример.

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

Макароны.

Попробуем воспользоваться командой СПЕЦИАЛЬНАЯ ВСТАВКА и скопировать все данные.

Сначала мы выделяем имеющуюся таблицу, правой кнопкой вызываем меню и жмем КОПИРОВАТЬ.

В свободной ячейке снова вызываем меню правой кнопкой и нажимаем СПЕЦИАЛЬНАЯ ВСТАВКА.

Если мы оставим все как есть по умолчанию и просто нажмем ОК, то таблица вставится полностью, со всеми ее параметрами.

Попробуем поэкспериментировать. В СПЕЦИАЛЬНОЙ ВСТАВКЕ выберем другой пункт, например, ФОРМУЛЫ. Получили уже неформатированную таблицу, но с работающими формулами.

ФОРМУЛЫ.

Теперь вставим не формулы, а только ЗНАЧЕНИЯ результатов их вычислений.

ЗНАЧЕНИЯ.

Чтобы новая таблица со значениями получила внешний вид аналогичный образцу выделим ее и вставим ФОРМАТЫ с помощью специальной вставки.

ЗНАЧЕНИЯ.

Теперь попробуем выбрать пункт БЕЗ РАМКИ. Получили полную таблицу, но только без выделенных границ.

Полезный совет! Чтобы перенести формат вместе с размерами столбцов нужно перед копированием выделить не диапазон исходной таблицы, а столбцы целиком (в данном случаи это диапазон A:F).

Аналогично можно поэкспериментировать с каждым пунктом СПЕЦИАЛЬНОЙ ВСТАВКИ, чтобы наглядно увидеть, как она работает.



Перенос данных на другой лист

Перенос данных на другие листы книги Excel позволяет связывать несколько таблиц. Это удобно тем, что при замене какого-то значения на одном листе, меняются значения на всех остальных. При создании годовых отчетов это незаменимая вещь.

Рассмотрим, как это работает. Для начала переименуем листы Excel в месяцы. Затем с помощью уже знакомой нам СПЕЦИАЛЬНОЙ ВСТАВКИ перенесем таблицу на февраль и удалим значения из трех столбов:

  1. На начало месяца.
  2. Приход.
  3. Расход.

Столбец «На конец месяца» у нас задан формулой, поэтому при удалении значений из предыдущих столбцов, он автоматически обнуляется.

Перенесем данные по остатку макарон каждой марки с января на февраль. Это делается буквально в пару нажатий.

  1. На листе ФЕВРАЛЬ ставим курсор в ячейку, показывающую количество макарон марки А на начало месяца. Можно посмотреть на рисунок выше – это будет ячейка D3.
  2. Ставим в этой ячейке знак РАВНО.
  3. Переходим на лист ЯНВАРЬ и кликаем на ячейку, показывающую количество макарон марки А на конец месяца (в нашем случае это ячейка F2 на листе «январь»).

Январь.

Получаем следующее: в ячейке C2 образовалась формула, которая отсылает нас на ячейку F2 листа ЯНВАРЬ. Протянем формулу вниз, чтобы знать количество макарон каждой марки на начало февраля.

Аналогично можно перенести данные на все месяцы и получить наглядный годовой отчет.

Перенос данных в другой файл

Аналогично можно переносить данные из одного файла в другой. Данная книга в нашем примере так и называется EXCEL. Создадим еще одну и назовем ее ПРИМЕР.

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

Скопируем в книгу ПРИМЕР таблицу с помощью все той же СПЕЦИАЛЬНОЙ ВСТАВКИ. И опять удалим значения из трех столбцов. Проведем те же действия, что и в предыдущем параграфе, но переходить уже будем не на другой лист, а на другую книгу.

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

Пример.

Теперь вы знаете, как грамотно переносить данные из таблиц в рамках одного листа, с одного листа на другой, а также с одного файла в другой.

&НаСервере
Функция Конвертация_Excel_в_ТЗ(АдресВХранилище)ИмяФайлаExcel = ПолучитьИмяВременногоФайла(«.xlsx»); // или реквизит с выбором файла .xlsx
   
ФайлИмпортаExcel = ПолучитьИзВременногоХранилища(АдресВХранилище);
   
ФайлИмпортаExcel.Записать(ИмяФайлаExcel);ТабличныйДокумент = Новый ТабличныйДокумент;
    Попытка
       
ТабличныйДокумент.Прочитать(ИмяФайлаExcel, СпособЧтенияЗначенийТабличногоДокумента.Текст);
    Исключение
       
Сообщение = Новый СообщениеПользователю;
       
Сообщение.Текст = ОписаниеОшибки();
       
Сообщение.Сообщить();
    КонецПопытки;
//Автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на «»
   
ПЗ = Новый ПостроительЗапроса;
   
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
   
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
   
ПЗ.ЗаполнитьНастройки();
   
ПЗ.Выполнить();ТаблицаСДанными = ПЗ.Результат.Выгрузить();

    Возврат

ТаблицаСДанными;

КонецФункции

Like this post? Please share to your friends:
  • Excel выводить список ячеек
  • Excel выбрать ячейки по нескольким значениям
  • Excel выводить не все данные
  • Excel выбрать ячейки по имени
  • Excel выводить на печать закрепленные области