При копировании из 1с в excel не суммирует
Здравствуйте. После обновления Windows 10 в ноябре-декабре 2016 г. при копировании из программы 1С в Excel через RDP клиент скопированные в буфер обмена начали вставляться в Excel без формата как текст. Необходимо, чтобы вставка была, как ранее, т. е. с форматом (цифры должны вставляться без пробелов, не как текст, а как числа). Мы используем: Windows 10 Pro x64, RDP клиент версии 10.0.14393.447. Когда стояла система Windows 8, клиет 6 все работало корректно. Есть ли возможность решить данную проблему?
Все ответы
Здравствуйте, есть пару вариантов:
1) Если у пользователя перенаправленный/перемещаемый профиль, он может на сервере сохранять куда-то себе excel файл (раб.стол, документы и т.п.) и он сразу же появится на локальной машине в нормальном формате.
2) Если профиля локальные, создайте на локальном компьютере сетевую папку и подключите пользователю её на сервере с 1С, пусть туда сохраняет.
Эти способы исключают обмен данными через буфер, но не решают проблему самого буфера.
Здравствуйте. Благодарю за ответ. В нашем случае необходимо именно копирование через буфер из 1С напрямую в Excel без сохранения файлов, т.к. при сохранении файлов расположение столбцов/строк смещается под формат выгружаемого отчета, а при копировании через буфер вставка идет клетка в клетку.
Вы нашли решение этой проблемы? У меня происходит всё тоже самое.
Бухгалтера жалуются, проблему решить не удается. Читал статью, которая ниже, отключал перенаправление диска C: в RDP, но это не помогает. что делать?
Добрый вечер. Проблема возникает начиная с Windows 10 1607/Windows Server 2016. Затрагивает только копирование непосредственно из 1С, запущенной удаленно, в Excel, запущенный локально. Если скопировать из удаленной 1С в удаленный Excel, а затем из него в локальный Excel, то все будет в порядке. Это первый вариант решения проблемы.
Со вторым вариантом, не совсем понятна лицензионная чистота и вообще так делать не надо, по-хорошему, но работать будет, а также не требует вышеописанных манипуляций от пользователя. В зависимости от того, что запущено на клиенте и на сервере требуется заменить некоторые системные файлы на более старые.
3. Локальный > Windows 10 1607 + удаленный Windows Server 2016 - комбинация пунктов 1 и 2.
Понятное дело, что при обновлении ОС и замене вышеуказанных файлов, операцию нужно будет повторять до момента выпуска исправления.
Проблема была выявлена в инфраструктуре, где платформа 1С:Предприятие 8.3 опубликована на терминальном Windows Server 2016, а клиентами служат ПК с Windows 10 и Excel в составе пакета Microsoft Office 365. Обновления для ПП устанавливались достаточно своевременно.
В процессе поиска решения были рассмотрены следующие варианты:
- замена значений в Excel через сочетание Ctrl+H;
- сохранение всего табличного документа 1С как файл формата Excel и последующая работа со значениями в рамках ПП Microsoft
- применить условное оформление к ячейкам
3) от Excel-еводов:
- написать макрос, который бы сам выполнял команду Ctrl+H
- редактирование региональных стандартов ОС
Перечисленные тут способы не позволили решить проблему достаточно качественно. Однако, последний вариант натолкнул на мысль попробовать изменить региональные установки самой информационной базы 1С. Для этого потребуется монопольно запустить режим "1С:Конфигуратор", где в подменю "Администрирование" выбрать пункт "Региональные установки информационной базы", в открывшейся форме убрать "галку" с флага "Использовать региональные установки текущего сеанса", что позволит установить пробел в поле "Разделитель групп". Да, вот так просто, не выбирая предложенных значений, нажимаем пробел, а затем применяем настройки нажатием кнопки "ОК".
Очевидно, что данный способ может позволить быстро решить проблему даже не техническому специалисту при наличии соответствующего доступа.
P.S. Данная настройка повлияет на формат чисел не только при копировании в Excel! Например, при выгрузке числовых значений в txt файл, пробел будет так же добавлен как разделитель разрядов. Это может нарушить работу со сторонними сервисами, если те "не умеют" воспринимать такой символ разделения. Я столкнулся с подобной ситуацией при загрузке файла зарплатного проекта в клиент одного из банков. Решение данной проблемы я нашел в банальном применений функции СтрЗаменить() для числовых значений.
Специальные предложения
Sub ПреобразоватьВТекст()
Dim sTempValue As String
Dim c As Range
On Error Resume Next
For Each c In ActiveWindow.Selection
sTempValue = Str(c.Value)
c.NumberFormat = "@"
c = Trim(sTempValue)
Next
On Error GoTo 0
1) открыть Ексель
2) открыть меню Вид, справа видим подменю "Макросы"
3) для того чтобы наш макрос был доступен всегда (при любой открытой книге), необходимо вставить его в Личную книгу макросов.
по умолчанию ее нет, надо создать. Как это делается?
в подменю "Макросы" нажимаем "запись макроса", в появившейся форме выбираем "сохранить в" = "личная книга макросов".
нажимаем ОК. началась запись, щелкни пару раз где-нибудь на листе открытой в данной момент книги.
Для того чтобы остановить запись в левом нижнем углу интерфейса Екселя нажми на белый квадратик (справа от слова "Готово"). Запись прекратилась и у нас в Личной книге макросов записался макрос-пустышка скорее всего с названием "Макрос1".
4) Теперь нажимаем ALT+F11 и попадаем в среду разработки. Находим нашу Личную книгу макросов (VBAProject (PERSONAL.XLSB)), в дереве элементов в папке Modules находим Module1, дважды по нему щелкаем, удаляем наш макрос-пустышку и вместо него вставляем следующее
здесь же в редакторе нажимаем на кнопку Сохранить.
Теперь т.к. в нашей личной книге макросов есть хоть один макрос, эта личная книга будет всегда автоматом (в фоне) открываться и наш макрос всегда будет доступен.
Чтобы его вызвать предварительно выделяем в любой открытой книге диапазон ячеек, который нужно преобразовать в текст, нажимаем ALT+F8, выбираем наш макрос и жмем ОК.
Иногда на то, чтобы придумать некоторые вещи, уходит очень много времени. Но когда их УЖЕ придумали, то постфактум они кажутся очевидными и даже банальными. Из серии "а что, так можно было?".
С самых первых версий в строке состояния внизу окна Microsoft Excel традиционно отображались итоги по выделенным ячейкам:
При желании, можно было даже щёлкнуть по этим итогам правой кнопкой мыши и выбрать в контекстном меню, какие именно функции мы хотим видеть:
И только совсем недавно в последних обновлениях Excel разработчики Microsoft добавили простую, но гениальную фишку - теперь при щелчке мышью по этим итогам они копируются в буфер!
Но что делать тем, у кого пока (или уже?) нет такой версии Excel? Тут могут помочь несложные макросы.
Копирование суммы выделенных ячеек в Буфер с помощью макроса
Откройте на вкладке Разработчик (Developer) редактор Visual Basic или воспользуйтесь для этого сочетанием клавиш Alt + F11 . Вставьте новый пустой модуль через меню Insert - Module и скопируйте туда следующий код:
Логика его работы проста:
- Сначала идёт "защита от дурака" - мы проверяем что именно выделено. Если выделены не ячейки (а, например, диаграмма), то выходим из макроса.
- Затем при помощи команды GetObject мы создаем новый объект данных, где будет храниться впоследствии наша сумма выделенных ячеек. Длинный и непонятный буквенно-цифровой код - это, на самом деле, ссылка на ветку реестра Windows, где лежит библиотека Microsoft Forms 2.0 Object Library, которая умеет создавать такие объекты. Иногда такой трюк ещё называют неявным поздним связыванием. Если его не использовать, то пришлось бы заранее делать в файле ссылку на эту библиотеку через меню Tools - References.
- Сумма выделенных ячеек считается командой WorksheetFunction.Sum(Selection), а затем полученная сумма помещается в буфер обмена командой PutInClipboard
Для удобства использования можно, конечно же, повесить этот макрос на сочетание клавиш с помощью кнопки Макросы на вкладке Разработчик (Developer - Macros) .
А если хочется видеть, что именно скопировалось после выполнения макроса, то можно включить панель Буфер обмена с помощью маленькой стрелки в правом нижнем углу соответствующей группы на Главной (Home) вкладке:
Не только сумма
Если кроме банальной суммы хочется что-то ещё, то можно воспользоваться любой из функций, которую нам предоставляет объект WorksheetFunction:
Например, там есть:
- Sum - сумма
- Average - среднее арифметическое
- Count - количество ячеек с числами
- CountA - количество заполненных ячеек
- CountBlank - количество пустых ячеек
- Min - минимальное значение
- Max - максимальное значение
- Median - медиана (центральное значение)
- . и т.д.
С учетом фильтров и скрытых строк-столбцов
Что если в выделенном диапазоне окажутся скрытые (вручную или фильтром) строки или столбцы? Чтобы не учитывать их в итогах, нужно будет чуть-чуть модифицировать наш код, добавив к объекту Selection свойство SpecialCells(xlCellTypeVisible):
В этом случае подсчет любой функции итога будет применён только к видимым ячейкам.
Если нужна живая формула
Если пофантазировать, то можно придумать сценарии, когда в буфер лучше скопировать не число (константу), а именно живую формулу, которая подсчитывает нужные нам итоги по выделенным ячейкам. В этом случае придётся склеить формулу из фрагментов, добавив к ней дополнительно удаление знаков доллара и замену запятой (которая используется как разделитель адресов нескольких выделенных диапазонов в VBA) на точку с запятой:
Суммирование с дополнительными условиями
Ну и, наконец, для совсем уже маньяков можно написать макрос, который будет суммировать не все выделенные ячейки, а только те, что удовлетворяют заданным условиям. Так, например, будет выглядеть макрос помещающий в Буфер сумму выделенных ячеек, если их значения больше 5 и при этом они залиты любым цветом:
Как легко сообразить, условия можно задать абсолютно любые - вплоть до форматов ячеек - и в любых количествах (в том числе, связывая их между собой логическими операторами or или and). Простор для фантазии большой.
Проблема была выявлена в инфраструктуре, где платформа 1С:Предприятие 8.3 опубликована на терминальном Windows Server 2016, а клиентами служат ПК с Windows 10 и Excel в составе пакета Microsoft Office 365. Обновления для ПП устанавливались достаточно своевременно.
В процессе поиска решения были рассмотрены следующие варианты:
— замена значений в Excel через сочетание Ctrl+H;
— сохранение всего табличного документа 1С как файл формата Excel и последующая работа со значениями в рамках ПП Microsoft
— применить условное оформление к ячейкам
3) от Excel-еводов:
— написать макрос, который бы сам выполнял команду Ctrl+H
— редактирование региональных стандартов ОС
Перечисленные тут способы не позволили решить проблему достаточно качественно. Однако, последний вариант натолкнул на мысль попробовать изменить региональные установки самой информационной базы 1С. Для этого потребуется монопольно запустить режим "1С:Конфигуратор", где в подменю "Администрирование" выбрать пункт "Региональные установки информационной базы", в открывшейся форме убрать "галку" с флага "Использовать региональные установки текущего сеанса", что позволит установить пробел в поле "Разделитель групп". Да, вот так просто, не выбирая предложенных значений, нажимаем пробел, а затем применяем настройки нажатием кнопки "ОК".
Очевидно, что данный способ может позволить быстро решить проблему даже не техническому специалисту при наличии соответствующего доступа.
P.S. Данная настройка повлияет на формат чисел не только при копировании в Excel! Например, при выгрузке числовых значений в txt файл, пробел будет так же добавлен как разделитель разрядов. Это может нарушить работу со сторонними сервисами, если те "не умеют" воспринимать такой символ разделения. Я столкнулся с подобной ситуацией при загрузке файла зарплатного проекта в клиент одного из банков. Решение данной проблемы я нашел в банальном применений функции СтрЗаменить() для числовых значений.
После манипуляции с файлом необходимо его закрыть. В противном случае он останется захваченным в системе, и мы не сможем его использовать в других приложениях.
Клиент-Серверный вариант в управляемых формах.
1. Считываем данные из файла в массив из структур и затем этот массив передаем на сервер для дальнейших манипуляций с данными.
2-ой способ — это передать файл Excel на сервер через хранилище данных и далее работать с ним уже на сервере.
Очень часто приходится работать с очень большими файлами Excel, и его обработка путем перебора строк занимает огромное количество времени.
В таких случаех удобно в одно действие загрузить всю таблицу в массив и в потом работать уже непосредственно с массивом.
На выходе получаем двумерный массив, который содержит все данные указанного листа Excel
Полезные функции при работе с Excel:
Устанавливает видимость Excel при работе |
Добавление новой книги в файл Excel |
Сохранение книги Excel |
Добавление нового листа к книге |
Переименование листа |
Изменение маштаба листа |
Изменение ориентации листа |
Отступы листа |
Обращение к ячейки чтение/запись |
Обращение к области ячеек |
Очень часто при чтении или записи значений в Excel ставятся лишние пробелы в числе, например, вместо 1502 он читает как 1 502 и в дальнейшем это значение не приводится к числу. Эту проблему можно решить заменой. |
Объединение ячеек |
Работа с именованными ячейками в Excel |
Удаление ячейки |
Удаление области ячеек |
Обращение к строке |
Изменение ширины колонки |
Обращение к колонке |
Удаление Строки |
Фон ячейки / области / Строки / |
Функция переводит цвет из формата RGB в формат Excel |
Управление шрифтом в ячейки/строке/области |
Р азрешает переносить по словам в ячейке |
Управление рамкой ячейки |
Устанавливаем формат ячейки |
Формула в ячейки |
Формула в ячейки |
Формула в ячейки |
Формула в ячейки |
Функция для получения ширины колонки Excel Спасибо пользователю goodwill |
Разрешить перенос слов в ячейке Спасибо пользователю roofless |
Группировки данных на листе Спасибо пользователю dr-wit, ignor |
При работе с Excel мы оперируем столбцами как числом (Например, 1 столбец), а у Excel адресация столбцов производится с помощью символов. И когда нам нужно отредактировать формулу, то нам нужно номер столбца преобразовать в символ. В таких случаях вам пригодится эта функция.
2. Работа с Excel через ТабличныйДокумент 1С
С помощью данного метода можно и загружать из Excel и выгружать в Excel. Но на мой взгляд этот метод идепально подходит когда вам необходимо посто сохранить информацию в Excel без дальнейшей манипуляции.
Итак, приступим: загрузка из Excel:
1. Загружаем файл Excel в табличный документ
2. Производим манипуляции уже с ТабличнымДокументом
Давайте теперь разберем сохранение в Excel с помощью данного метода:
Тут все очень просто сначала мы формируем обычный Табличный документ и затем записываем его в Excel
2. Работа с Excel ADODB
Выражаю особую благодарность коллеги Fragster за хороший комментарий
Данный метод позволяет работать с Excel через ODBC и имеет ряд преимуществ:
- Не требует установки самой Excel, необходима лишь установить ODBC. Но как правило он уже установлен. Это особенность позволяет работать на стороне сервера без дополнительных установок Excel.
- Позволяет работать с таблицой Excel как с БД и строить к ней запросы на T-SQL. Таким образом мы можем делать отборы еще на этапе чтения данных и другие преимущества что дает Т-SQL. Что на мой взгляд огромный плюс.
Подключение к ADO
Отключение от ADO
Выполнение запроса
Пример запроса:
Запись в Excel тоже производится в виде запроса:
Хочу отметить что наименование полей производится по первой строке в таблице
ADODB предоставляет ряд объектов, с которыми мы работаем
ADODB.Recordset
В файле продемонстрированны оба варианта работы с запросами.
На этом пока все. По возможности буду дополнять статью 🙂
В архиве находится обработка, которая демонстрирует все описанные и другие возможности при работе с Excel.
Читайте также: