Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вставка содержимого поля MEMO в Excel. Режет до 256 символов / 23 сообщений из 23, страница 1 из 1
18.02.2020, 11:57
    #39927883
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Возникла следующая проблема. Вставляю в подготовленный шаблон Excel формата 97-2009 содержимое запроса, где есть поля типа MEMO. Вставляю командой CopyFromRecordset

Код: plaintext
XL.Worksheets(1).Cells(13, 1).CopyFromRecordset rs

rs - рекордсет.
Содержимое полей MEMO урезается до 256 символов.
Вручную можно внести гораздо больше символов. Кто-нибудь с таким сталкивался? И что делать?

Версия Access 2010? но думаю это не принципиально.



-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
18.02.2020, 12:25
    #39927904
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss,
обсуждалось мильён раз
https://www.sql.ru/forum/afsearch.aspx?s=???? MEMO&submit=?????&bid=4
...
Рейтинг: 0 / 0
18.02.2020, 14:03
    #39927963
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
В офисе 2003 метод CopyFromRecordset обрезал МЕМО поля, в офисе 2010 - нет. Сейчас проверил и с XLSX, и с XLS файлом. Правда, только одну запись с текстом вашего сообщения. Результат - весь текст, 799 символов.
У вас в Recordset-е действительно МЕМО поле или какая-то сборка из нескольких строк?
Или у вас Акс 2010, а Excel 2003?
Вы в коде Excel.Application какой версии получаете?
...
Рейтинг: 0 / 0
18.02.2020, 16:53
    #39928087
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
У меня рекордсет на основе 1 таблицы. Там два МЕМО поля.

На запрос

Код: plaintext
1.
? Excel.Application
Microsoft Excel

И как тут узнать версию?

Как я уже писал. Раблотаю я в Access 2010, а файл шаблона от Excel 97-2003.

ROI , спасибо, Вы мне скинули ссылки на более чем 500 постов. Могли бы просто написать, "Поищите по сайту" Это сарказм, ежели что.
...
Рейтинг: 0 / 0
18.02.2020, 17:22
    #39928101
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss

Код: vbnet
1.
XL.Worksheets(1).Cells(13, 1).CopyFromRecordset rs

Ваш XL, это WorkBook (это правильней) или Application?
Вы используете референс на библиотеку? Это точно свежая библиотека?

Joss

На запрос

Код: plaintext
1.
? Excel.Application
Microsoft Excel

И как тут узнать версию?
Если XL, это Application, то в теле процедуры:
Debug.Print XL.Version
иначе
Debug.Print XL.Application.Version

В запросе точно нет группировок или DISTINCT?

Я проверял таким кодом:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim fl As Object  'Excel.Workbook
Dim rs As DAO.Recordset

 Set rs = CurrentDb.OpenRecordset("Имя таблицы")
 Set fl = GetObject("Путь к XLS")
 fl.Application.Visible = True
 fl.Windows(1).Visible = True
 Debug.Print fl.Application.Version
 fl.Worksheets(1).Range("A6").CopyFromRecordset rs

Попробуйте и вы. Файл может быть закрыт или открыт.
...
Рейтинг: 0 / 0
19.02.2020, 10:09
    #39928301
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Я применяю позднее связывание
Код: vbnet
1.
2.
3.
Dim XL As Object
Set XL = CreateObject("excel.application")
XL.Workbooks.Open FileName:=strPathFileXLS

Так что версия та же, что и у Access

А какой (даже не соображу как назвать) Вы используете? DAO 3.6 или ACEDAO 14.0 ?
...
Рейтинг: 0 / 0
19.02.2020, 10:28
    #39928304
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss, читал моё сообщение на другом форуме?
...
Рейтинг: 0 / 0
20.02.2020, 13:00
    #39928864
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss
А какой (даже не соображу как назвать) Вы используете? DAO 3.6 или ACEDAO 14.0 ?
Если б вы не подсветили, я бы и не знал. Было ACEDAO 14.0, заменил на DAO 3.6 и повторил код, предложенный выше. Результат тот же - не обрезается. Попробуйте и вы этот код для чистоты эксперимента.
Joss

Код: vbnet
1.
2.
3.
Dim XL As Object
Set XL = CreateObject("excel.application")
XL.Workbooks.Open FileName:=strPathFileXLS

Так что версия та же, что и у Access
Насчет версии, это так на 90%, но бывает всякое.
Насчет вашего кода:
XL.Workbooks.Open FileName:=strPathFileXLS
здесь вы создаете объект Workbook, но не присваиваете его отдельной переменной.
XL.Worksheets(1).Cells(13, 1).CopyFromRecordset rs
Здесь вместо XL надо бы объект Workbook, а у вас получается неявное использование метода
XL. ActiveWorkBook. Worksheets(1)
Ваш вариант работает, но при доступе к Excel извне это неправильно и может привести к неуничтожению процесса Exce. Кстати, а как вы выполняете Save или SaveAs?
...
Рейтинг: 0 / 0
22.02.2020, 20:21
    #39929849
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Кривцов Анатолий
Насчет версии, это так на 90%, но бывает всякое.
Насчет вашего кода:
XL.Workbooks.Open FileName:=strPathFileXLS
здесь вы создаете объект Workbook, но не присваиваете его отдельной переменной.
XL.Worksheets(1).Cells(13, 1).CopyFromRecordset rs
Здесь вместо XL надо бы объект Workbook, а у вас получается неявное использование метода
XL. ActiveWorkBook. Worksheets(1)
Ваш вариант работает, но при доступе к Excel извне это неправильно и может привести к неуничтожению процесса Exce. Кстати, а как вы выполняете Save или SaveAs?

Правильно! процесс у меня остаётся в памяти. Лечится только выгрузкой программы.

А сохраняю файл я вот так
Код: vbnet
1.
2.
3.
4.
            XL.Worksheets(1).Cells(13, 5).Select
            XL.Worksheets(1).Protect Password:="15161718"
            XL.ActiveWorkbook.SaveAs FileName:=strOutputPath & "\" & sss
            XL.ActiveWindow.Close



Панург , Ваше сообщение на другом форуме читал.

Кривцов Анатолий , а у меня DAO 3,6 режет по 256 символов. ACEDAO не режет, но после 256 символа выводит всякий мусор.

При прямой записи в ячейку листа Excel этого не происходит. Можно записать информацию большего размера. Тестовый пример на работе Постараюсь выложить.
...
Рейтинг: 0 / 0
22.02.2020, 21:08
    #39929859
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss
Панург , Ваше сообщение на другом форуме читал.

Joss
При прямой записи в ячейку листа Excel этого не происходит. Можно записать информацию большего размера.
Ну какбэ к этому я и подводил в том эксперименте.
...
Рейтинг: 0 / 0
24.02.2020, 12:39
    #39930160
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss, третий раз прошу - выполните мой код из второго поста и скажите результат.
Покажите текст своего запроса. У меня подозрение на него.
А насчет "процесс у меня остаётся в памяти" - подправьте код с использованием переменной типа WorkBook. Если наслаждение оператора от наблюдением за живой таблицей не входило в вашу задачу, то никогда не используйте метод Select и объект Selection.
Ну и вместо
XL.ActiveWindow.Close
надо
XL.Quit.
...
Рейтинг: 0 / 0
25.02.2020, 11:47
    #39930485
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Анатолий. Завтра обязательно сделаю и отпишусь. Сегодня не получится.
...
Рейтинг: 0 / 0
27.02.2020, 10:41
    #39931510
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Кривцов Анатолий , провел эксперимент, что Вы и хотели.
Вот текст примера
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim fl As Object  'Excel.Workbook
Dim rs As DAO.Recordset
Dim strTabl As String
Dim strPath As String
Dim strShabl As String
Dim strFileNameXLS As String

strTabl = "SELECT Wrk_309_04.Идентиф, Wrk_309_04.НаимОКПО & chr(10)," _
& " Wrk_309_04.Наим & chr(10), len(Wrk_309_04.Наим)" _
& " FROM Wrk_309_04" _
& " WHERE wrk_309_04.КодСуб = 606 " _
& " ORDER BY Wrk_309_04.ОКПО, Wrk_309_04.Идентиф"

strFileNameXLS = "ОтраслПрогр_plan_test.xls"
strPath = CurrentProject.Path
strShabl = strPath & "\" & strFileNameXLS

 Set rs = CurrentDb.OpenRecordset(strTabl)
 Set fl = GetObject(strShabl)
 fl.Application.Visible = True
 fl.Windows(1).Visible = True
 Debug.Print fl.Application.Version
 fl.Worksheets(1).Range("A13").CopyFromRecordset rs

Использовался ACEDAO 14.0
Текст режется до 255 символов. Для контроля рядом вывожу длину текста в запросе. Вот что получилось. В первой строке не хватает буква "а", во второй там нет названия района и нас. пункта
...
Рейтинг: 0 / 0
27.02.2020, 11:12
    #39931532
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Кривцов АнатолийУ вас в Recordset-е действительно МЕМО поле или какая-то сборка из нескольких строк?
Ответ JossУ меня рекордсет на основе 1 таблицы. Там два МЕМО поля
по факту - сборка из нескольких строкSELECT ..., Wrk_309_04.НаимОКПО & chr(10), Wrk_309_04.Наим & chr(10) , ... Вот в добавлении & chr(10) собака и порылась. Это уже не чистое МЕМО. Думаю, без него будет работать.
...
Рейтинг: 0 / 0
27.02.2020, 11:31
    #39931543
zimkon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss,
а так попробуй
Код: vbnet
1.
2.
3.
4.
5.
strTabl = "SELECT Wrk_309_04.Идентиф, Wrk_309_04.НаимОКПО & chr(10)," _
& " CStr(Wrk_309_04.Наим & chr(10)), len(Wrk_309_04.Наим)" _
& " FROM Wrk_309_04" _
& " WHERE wrk_309_04.КодСуб = 606 " _
& " ORDER BY Wrk_309_04.ОКПО, Wrk_309_04.Идентиф"


или тоже самое с Trim
...
Рейтинг: 0 / 0
27.02.2020, 11:54
    #39931568
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Убрал знак LF - chr(10) начал выводиться весь текст. Предложение Константина не прошло. Текст режется до 255 символов.
Проблема в том, что иногда в ячейке не видна последняя строчка, для этого и добавил chr(10), т.к. автоматическое расширение по высоте не всегда корректно отрабатывает.

И как теперь быть? Ни одно, так другое...
...
Рейтинг: 0 / 0
27.02.2020, 12:07
    #39931587
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Попробовал ещё спецсимволы с кодами 11, 12 и 13 . Наличие любого спецсимвола режет строку до 255 знаков.

Пробовал так же заменить chr на chr$ Результат аналогичный.
...
Рейтинг: 0 / 0
27.02.2020, 13:28
    #39931666
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss, а если текст собирать функцией, и в ней уже добавлять нужные символы (или просто пробелы).
...
Рейтинг: 0 / 0
27.02.2020, 13:36
    #39931675
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
JossИ как теперь быть? Ни одно, так другое...
Дело не в спецсимволах. В запросе вы создаете вычисляемое поле с конкатенацией строк. JET понимает это поле как тип ТЕКСТ. То, что на экране запрос может показывать полный текст - обманка.
Для решения подобных проблем нужна любая таблица с MEMO полем (есть такие и в системных) и запрос UMION.
Для вашего случая (если Идентиф - длинное целое):
Код: plsql
1.
2.
3.
SELECT Id As Идентиф, Connect As НаимОКПО, Connect As Наим FROM MSysObjects WHERE False;
UNION ALL
SELECT Идентиф, НаимОКПО & chr(10), Наим & chr(10) FROM Wrk_309_04 WHERE...

Здесь типы полей берутся из 1-й секции (не возвращающей записи).
...
Рейтинг: 0 / 0
27.02.2020, 15:24
    #39931759
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Кривцов Анатолий, проверил Ваше предложение.

В этом случае текст не режется, но вместо chr(10) выводится квадратик с вопросом внутри.
...
Рейтинг: 0 / 0
27.02.2020, 15:38
    #39931771
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
На другом форуме предложили следующее.

Перед выводом выполнить обновление таблицы
Код: sql
1.
2.
UPDATE Wrk_309_04 
SET НаимОКПО = НаимОКПО  & chr(10), Наим = Наим & chr(10)


А потом делать вывод
Код: sql
1.
2.
3.
4.
strTabl = "SELECT Идентиф, НаимОКПО, Наим, len(Наим) - 1 " & _
          "FROM Wrk_309_04 " & _
          "WHERE КодСуб = 606 " & _
          "ORDER BY ОКПО, Идентиф"

Проверил. В этом случае выводится без обрезания информации и без вывода непечатных символов. Задача решена.
...
Рейтинг: 0 / 0
27.02.2020, 16:07
    #39931799
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Joss, решили и ладно. Хотя это не решение, а костыль.
Но я проверил у себя - перевод строки на месте. Никаких квадратиков.
Если не лень, то проверьте код последнего символа (например =КОДСИМВ(ПРАВСИМВ(АдресЯчейки;1)). У меня - 10.
Попробуйте еще chrw(10). У меня тот же результат.
...
Рейтинг: 0 / 0
27.02.2020, 16:43
    #39931835
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
Кривцов Анатолий, у Вас всё правильно. это уже я ошибся и оставил в примере chr(12) вместо chr(10)/ Вот и появился непечатный символ. А так он выводится нормально.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вставка содержимого поля MEMO в Excel. Режет до 256 символов / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]