Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Как обойти ограничение в 255 символов?


Автор: Валк 26.8.2006, 16:03
При формировании мною данных (отчасти автоматическом) в ячейке Excel может быть размещено более 255 символов. При использовании источников данных (как пример, при копировании листов) в этом случае никакого слияния данных из этой ячейки не происходит. Как побороть?

Автор: Izuver 28.8.2006, 23:30
Можно по подробней о"При использовании источников данных (как пример, при копировании листов) в этом случае никакого слияния данных из этой ячейки не происходит"

Добавлено @ 23:37 
Цитата(Валк @ 26.8.2006,  16:03)
в ячейке Excel может быть размещено более 255 символов.

В ячейку я запихнул 6000 символов (это конечно не предел). В одной ячейке, в видимой части или при распечатке вижу 1360 символов. Символы были ввиде:
1,2,3,4,5,6,7...1441,1442,1443,1444,1445,

Автор: Валк 29.8.2006, 12:02
Izuver
В ячейку Excel (речь идёт о 2000 и ХР) можно очень много символов "запихнуть". В любом случае, больше чем 255. Однако, это не означает, что потом из неё эти символы можно извлечь.

Попробуй открыть две книги. В любом листе одной из них в любую из ячеек запиши более 255 символов (любых, у меня, в частности, помимо обычных символьных использовались и служебные), затем щёлкни по по названию этого листа правой кнопкой манипулятора. В контекстном меню выбери Переместить/скопировать -> Выбираешь другую книгу -> Отмечаешь чек-бокс "Создавать копию" -> ОК (Внимание, в книге куда копируется лист не должно быть листа с именем как и у копируемого листа). Если у тебя в какой-либо ячейке более 255 символов, то Excel ругнётся, что не может скопировать все символы.
Это тебе как один из примеров "ограничения на 255 символов". Обойти его в этой ситуации возможно (выделяешь весь лист целиком и копируешь его на чистый лист другой книги).

У меня ситуация несколько другая (но она натыкается на такое же ограничение). Я использую слияние. Книга Excel у меня используется как источник данных из которого я их переношу в документ Word. Если в какой-либо ячейке получается более 255 символов, то эти данные либо переносятся не полностью, либо не переносятся вовсе. Я думал, что и в этом случае как-то можно обойти эту проблему. К сожалению, не получилось :-(
Пришлось мне данные, в ячейках где происходит переполнение ограничения в 255 символов, распределять на несколько ячеек и в документе Word их собирать воедино. Недостатком этого способа является то, что (насколько я могу судить по своему небольшому опыту) связывать книгу Excel с документом Word можно используя небольшое количество ячеек (по-моему, около 70). И если перед решением возникшей проблемы я использовал всего 26 ячеек, то при разбивке данных мне пришлось использовать уже 48 ячеек.

Вопрос означенный в теме я помечаю как решённый, однако если кто знает как побороть это ограничение, то прошу отписать тут.
Хотя, как сказал мне Akina, это ограничение вроде как не обходится.

Автор: Romikgy 29.8.2006, 13:42
Код

Function CopyLongString(wrbook1, wrsheet1, x, y, wrbook2, wrsheet2) As Integer

Dim i As Integer
Dim sx As String, ss As String
If Len(Workbooks(wrbook1).Worksheets(wrsheet1).Cells(x, y)) > 250 Then
sx = Workbooks(wrbook1).Worksheets(wrsheet1).Cells(x, y)
Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) = ""
i = Len(sx) / 250
For k = 0 To i
ss = Mid(sx, 1 + k * 250, 250)
Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) = Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) + ss
Next k
Else
Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) = Workbooks(wrbook1).Worksheets(wrsheet1).Cells(x, y)
End If
CopyLongString = 1
End Function
Function CopyWheet1(wrbook1, wrsheet1, wrbook21, wrsheet21) As Integer

Dim r As Integer
Dim ri As Integer
Dim c As Integer
Dim ci As Integer

r = Workbooks(wrbook1).Worksheets(wrsheet1).UsedRange.Rows.Count
c = Workbooks(wrbook1).Worksheets(wrsheet1).UsedRange.Columns.Count
For ri = 1 To r
For ci = 1 To c
z = CopyLongString(wrbook1, wrsheet1, ri, ci, wrbook21, wrsheet21)
Next ci
Next ri
CopyWheet1 = 1
End Function
Sub rrrr()
 z = CopyWheet1(1, 1, 2, 1)

End Sub


CopyWheet1(1, 1, 2, 1) - копирует с 1 книги 1 листа  на 2 книгу 1 лист

Автор: Валк 30.8.2006, 11:04
Romikgy
CopyWheet1(1, 1, 2, 1) - копирует с 1 книги 1 листа  на 2 книгу 1 лист
Прости, а зачем мне копировать из одной книги Excel в другую книгу Excel? Пример с копированием листов я приводил в качестве наглядного пояснения "ограничения в 255 символов".
При использовании слияния (данные из книги Excel переносятся в документ Word) как можно использовать твой код?

Автор: Romikgy 30.8.2006, 12:10
Цитата(Валк @  30.8.2006,  10:04 Найти цитируемый пост)
данные из книги Excel переносятся в документ Word

точнее ?
Цитата(Валк @  30.8.2006,  10:04 Найти цитируемый пост)
Прости, а зачем мне копировать из одной книги Excel в другую книгу Excel? 

ты сказал , есть проблема с переносом длинных строк из одного листа книги на другой лист книги, я показал как ее обойти, также можно копировать в ворд, юзай только CopyLongString , правда ее переделать надо smile

Автор: Валк 30.8.2006, 12:33
Romikgy
ты сказал , есть проблема с переносом длинных строк из одного листа книги на другой лист книги, я показал как ее обойти
Я тоже показал как её обойти ;о)

также можно копировать в ворд, юзай только CopyLongString
Хм, боюсь, это слишком сложно для такого user posted image как я.

Автор: Romikgy 30.8.2006, 13:00
дык скажи че те конкретно надо , а не закоулками

ЗЫ сверху  есть кнопочка тыстрая цитата , те понравиться smile

Автор: Валк 30.8.2006, 16:00
Romikgy
дык скажи че те конкретно надо , а не закоулками
Так я вроде описал наверху задачу user posted image

Если интересует общая постановка задачи, то уже стыдно признаваться (ибо заранее знаю, что пошлют читать букварь).
Представь, что ты берёшь ипотечный кредит. Само собой у тебя будет целая пачка документов (кредитный договор, договор страхования, пара заявлений, несколько анкет и т. д. и т. п.). Все они стандартные, меняется только данные людей (Ф. И. О., паспортные данные, прописка...).
Менеджеры документы заполняют по порядку: расчёт, договор, заявление... Чтобы данные которые уже заведены не заносить по новой я решил их из какой-то базы раздавать по разным документам.
Раздача крупных кусков у меня провалилась.

Автор: Romikgy 30.8.2006, 16:16
Цитата(Валк @  30.8.2006,  15:00 Найти цитируемый пост)
Представь, что ты берёшь ипотечный кредит

не представляю, даже таких страшных слов не знаю
Цитата(Валк @  30.8.2006,  15:00 Найти цитируемый пост)
из какой-то базы 

в качестве базы Эксель?

Автор: Валк 31.8.2006, 07:00
Romikgy
в качестве базы Эксель?
Да.
Может выбор не такой уж и верный, и способ решения задачи не совсем оптимальный, только с моими знаниями и навыками - единственный вариант распостранения одинаковых сведений среди одинаковых шаблонов документов.

Автор: Romikgy 31.8.2006, 09:01
самый простой вариант , раздели надписи в ячейках , что бы было меньше 250 символов , или переноси как показал я через VBA , имхо так будет даже правильнее и документы можно и формировать и форматировать автоматически

Автор: Валк 31.8.2006, 11:12
Romikgy
самый простой вариант, раздели надписи в ячейках , что бы было меньше 250 символов
Да я так и сделал (сообщение от 29.8.2006, 12:02, третий абзац).

документы можно и формировать и форматировать автоматически
Хотелось бы сделать так, а то мой способ не совсем удобен и прост.

Автор: Romikgy 31.8.2006, 11:21
Цитата(Валк @  31.8.2006,  10:12 Найти цитируемый пост)
Хотелось бы сделать так, а то мой способ не совсем удобен и прост. 

ну дык учи вба, если что тут помагать будут smile
PS а то пространственные высказывания не несут информативности беседы smile

Автор: Валк 31.8.2006, 12:07
Romikgy
учи вба, если что тут помагать будут
Не сегодня-завтра куплю букварь, денег уже выделили.
В связи с этим у меня вопрос не совсем по теме, какую книжку лучше купить? Мне на этом форуме посоветовали: Андрей Гарнаев, VBA, 848 с., БХВ-Петербург. Нашёл в нашем книжном магазине - 449 руб.
Я её просмотрел мельком, смущает, что не указана версия VBA (или хотя бы для какого он офиса), т. к. на работе я пользую Microsoft Office 2000, то боюсь, что если в ней рассматривается версия для более позднего офиса, то не все функции рассмотренные в книге будут работать у меня.
Может ещё какую книгу посоветуешь?

Автор: Romikgy 31.8.2006, 14:23
посоветую на книги сильно не уповать , доставляешь в офисе хелп по ВБА и вперед , книгу дабы понять общий смысл , а в хелпе проверяешь конкретные ф-ции , и программишь smile
имхо в вба нет понятия версий, так что считается что она на всех одна хотя есть и отличия в разных версиях оффисов, так что учи все , и юзай хелп! и будет усе окей smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)