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

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

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

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



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

На запрос

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

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

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

ROI , спасибо, Вы мне скинули ссылки на более чем 500 постов. Могли бы просто написать, "Поищите по сайту" Это сарказм, ежели что.
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39928101
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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39928301
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я применяю позднее связывание
Код: 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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39928304
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss, читал моё сообщение на другом форуме?
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39928864
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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39929849
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий
Насчет версии, это так на 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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39929859
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss
Панург , Ваше сообщение на другом форуме читал.

Joss
При прямой записи в ячейку листа Excel этого не происходит. Можно записать информацию большего размера.
Ну какбэ к этому я и подводил в том эксперименте.
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39930160
Joss, третий раз прошу - выполните мой код из второго поста и скажите результат.
Покажите текст своего запроса. У меня подозрение на него.
А насчет "процесс у меня остаётся в памяти" - подправьте код с использованием переменной типа WorkBook. Если наслаждение оператора от наблюдением за живой таблицей не входило в вашу задачу, то никогда не используйте метод Select и объект Selection.
Ну и вместо
XL.ActiveWindow.Close
надо
XL.Quit.
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39930485
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий. Завтра обязательно сделаю и отпишусь. Сегодня не получится.
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931510
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий , провел эксперимент, что Вы и хотели.
Вот текст примера
Код: 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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931532
Кривцов АнатолийУ вас в Recordset-е действительно МЕМО поле или какая-то сборка из нескольких строк?
Ответ JossУ меня рекордсет на основе 1 таблицы. Там два МЕМО поля
по факту - сборка из нескольких строкSELECT ..., Wrk_309_04.НаимОКПО & chr(10), Wrk_309_04.Наим & chr(10) , ... Вот в добавлении & chr(10) собака и порылась. Это уже не чистое МЕМО. Думаю, без него будет работать.
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931543
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931568
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрал знак LF - chr(10) начал выводиться весь текст. Предложение Константина не прошло. Текст режется до 255 символов.
Проблема в том, что иногда в ячейке не видна последняя строчка, для этого и добавил chr(10), т.к. автоматическое расширение по высоте не всегда корректно отрабатывает.

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

Пробовал так же заменить chr на chr$ Результат аналогичный.
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931666
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss, а если текст собирать функцией, и в ней уже добавлять нужные символы (или просто пробелы).
...
Рейтинг: 0 / 0
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931675
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
Вставка содержимого поля MEMO в Excel. Режет до 256 символов
    #39931759
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий, проверил Ваше предложение.

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

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


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