Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Memo при экспорте в Excel  [new]
Гурант
Member

Откуда:
Сообщений: 129
Добрый день!
Реализовал механизм экспорта в Эксел из массива
_oBook.ActiveSheet.Range(_start_pos+":"+_oBook.ActiveSheet.Range(_start_pos).Offset(0,_kol_fields-1).Address).Value = this.array_pointer("_arr_fnames")
Все хорошо и быстро но есть одина проблема:
У меня много Memo-полей которые обязательны для экспорта. Но поля, длинна которых больше ~911 символов не пролазят. т.е. появляется ошибка
OLE error code 0x800a03ec: Unknown COM status code

обрезаю лишние символы - все хорошо. Наличие других полей в курсоре не влияет. Memo содержит переносы каретки для форматирования текста (нужно).

что это? Это лечится или надо менять способ экспорта
28 апр 06, 14:58    [2614531]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
5631
Member

Откуда:
Сообщений: 452
Если в Excel формат поля "Общий" , длина записи может быть любой.
28 апр 06, 15:17    [2614630]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
Гурант
Member

Откуда:
Сообщений: 129
я создаю новый документ. т.е. форматы по умолчанию
28 апр 06, 15:25    [2614662]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
Гурант
Member

Откуда:
Сообщений: 129
убирание переводов кареток не помогает
28 апр 06, 15:29    [2614687]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
ВладимирМ
Member

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

lcText = Replicate(Replicate('a23456789 ',10)+Chr(10),50)
_oBook.ActiveSheet.Cells(1,1).Value = m.lcText

При вставке через массив у меня ошибки COM не выскакивает (Excel 2002 + WinXP), но происходит обрезание вставляемого текста. У меня предел 1823 символа. Остальное просто отрезает.

Если же вставка через буфер обмена, то CHR(10) воспринимается как CHR(13). Т.е. не перенос в пределах ячейки, а перенос на следующую строку (в другую ячейку)
29 апр 06, 00:18    [2616184]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Гурант!

Да, это ограничение имеет место быть.
Вот кусок моего кода, обрабатывающий массив перед его выводом в Excel.
* Дабы текст всегда оставался текстом (даже если там цифры)
* и чтобы избежать ошибок с = в качестве значения ячейки
IF VARTYPE(m.paData(m.ln3)) = "C"
  * Заменим CRLF на просто LF - по формату Excel
  paData(m.ln3) = STRTRAN(paData(m.ln3), CHR(13) + CHR(10), CHR(10))
  * Обрежем слишком длинные поля - они не пройдут через массив
  paData(m.ln3) = "'" + LEFT(m.paData(m.ln3), 900)
ENDIF
IF VARTYPE(m.paData(m.ln3)) = "D" AND ;
    EMPTY(m.paData(m.ln3))
  paData(m.ln3) = ""
ENDIF
IF VARTYPE(m.paData(m.ln3)) = "T" AND ;
    EMPTY(m.paData(m.ln3))
  paData(m.ln3) = ""
ENDIF
IF VARTYPE(m.paData(m.ln3)) $ "DT" AND ;
    YEAR(m.paData(m.ln3))< 1900
  paData(m.ln3) = TRANSFORM(m.paData(m.ln3), "@E")
ENDIF
Конечно этот код не претендует на полноту, это лишь те ошибки с которыми я
сам встречался при подобном способе экспорта :) Как видишь мне не критична
была полнота вывода memo полей (это код из специального метода "грубого" но
универсального экспорта содержимого одного грида). также обрати внимание на
добавление апострофа и замену CRLF на просто LF.

Posted via ActualForum NNTP Server 1.3

1 май 06, 00:17    [2618182]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
Гурант
Member

Откуда:
Сообщений: 129
А что дает апостроф?
2 май 06, 11:52    [2620220]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Гурант
А что дает апостроф?

Указывает Экселю что это символьные данные, даже если состоят из одних цифр.
2 май 06, 13:18    [2620710]     Ответить | Цитировать Сообщить модератору
 Re: Memo при экспорте в Excel  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Гурант!

* Дабы текст всегда оставался текстом (даже если там цифры)
* и чтобы избежать ошибок с = в качестве значения ячейки

Апостроф это стандартный для Excel способ ЯВНО указать что данные являются
текстом, а не формулой, числом, датой или ещё чем-то "этаким".

Posted via ActualForum NNTP Server 1.3

10 май 06, 22:41    [2650006]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить