Имя: Пароль:
1C
1С v8
8.2: загрузка из файла CSV (или XLS) где более 65.000 строк
,
0 Sintez123
 
15.07.11
14:46
Всегда работала моя загрузка, как вдруг появился файл больше чем понимает ексель. Более 65536 строк. Причем такие большие файлы будут регулярно. Как загрузить такой? 1С ругается только на этот файл, остальные (меньше они) загружает без проблем.
1 smaharbA
 
15.07.11
14:47
цсв - пофиг сколько строк, грузи без екселя
2 Sintez123
 
15.07.11
14:50
а как без екселя грузить? Никогда не грузил так. Сейчас код такой:



   Файлы = НайтиФайлы(Путь, "*.csv");
   Для Б = 0 по Файлы.ВГраница() Цикл
       Файл = Файлы[Б].Путь + Файлы[Б].Имя;
       Акция = Справочники.Акции.НайтиПоРеквизиту("Тикер", Лев(Файлы[Б].Имя, 5));
       
       Попытка
           Ексель = Новый COMОбъект("Excel.Application");
           Внешний = Ексель.WorkBooks.Open(Файл);
       Исключение
           Сообщить(ОписаниеОшибки());
           Возврат;
       КонецПопытки;
       
       Сообщить(Файл);
       А = 2;
       Лист = Внешний.Sheets(1);
3 unregistered
 
15.07.11
14:51
(0) ADODB ?
4 Sintez123
 
15.07.11
14:52
не пробовал не разу ADODB
пошел гуглить, спасибо, дальше сам тогда разберусь. Просто надеялся что можно было малой кровью обойтись, а не переделывать.
5 Sintez123
 
15.07.11
14:53
(3)
Ексель = Новый COMОбъект("Excel.Application");
6 smaharbA
 
15.07.11
14:53
(4) поставь ексель 2007/2010
7 Fram
 
15.07.11
14:54
(0) csv это ж обычный текст с разделителями. зачем эксель?
8 Живой Ископаемый
 
15.07.11
14:57
2(7) а если он имеет такой вид:
0439;"назначение; платежа; хе-хе";34.5;25.02.2011
?
9 smaharbA
 
15.07.11
14:59
(8) а есть разница ?
10 NikVars
 
15.07.11
14:59
(7) Это смотря как обрабатывать. Если обрабатывать как текст, одна потеха, если как таблица мсофиса 2003 - другая.
11 Живой Ископаемый
 
15.07.11
15:08
2(9) пусть  скажет, интересно
12 NikVars
 
15.07.11
15:11
Щас тема свернулась в тему какое может быть содержимое у csv-xls файла и какое содержимое должно быть.
13 Fram
 
15.07.11
15:19
(8) ну такой и что?
14 Живой Ископаемый
 
15.07.11
15:19
расскажи как будешь делить эту строку...
15 milan
 
15.07.11
15:24
(14) а как ексель не будет делить?  разделители, если они не разделители квотиться должны не?
16 Sintez123
 
15.07.11
15:25
О! =) там вот так


0439;"назначение; платежа; хе-хе";34.5;25.02.2011



если текстом открыть. Так что я теперь через чтениеТекста х буду хавать
17 Живой Ископаемый
 
15.07.11
15:26
2(15) ексель поделит правильно, я спрашивал у человека который говорит что екселя не нужно, потому что это обычный текст с разделителями
18 Fram
 
15.07.11
15:26
(14) сначала обработать выражения в кавычках потом остальное.. и что?
19 Живой Ископаемый
 
15.07.11
15:27
2(16) как ты эту строку разделишь на 4 поля а не на 6?
20 Sintez123
 
15.07.11
15:28
как обычно.
там в каждой строке всегда шесть знаков точки с запятой, т.е. всегда шесть полей. и исключений быть не может
21 milan
 
15.07.11
15:30
(17)  если ексель правильно может поделить, то и без него можно поделить правильно, и ексель не нужен.
22 Живой Ископаемый
 
15.07.11
15:32
2(21) интересовали приемы практиков а не мнения теоретиков

Книга знаний: Преобразование csv в таблицу значений
23 Serginio1
 
15.07.11
15:34
24 Fram
 
15.07.11
15:35
(19) да вроде ничего сложного, если умеешь работать с функциями для работы со строками
25 Леха Дум
 
15.07.11
16:11
Что то вроде такого не предлагать?
ЧтениеТекста.Открыть(ИмяВходящегоФайла, "windows-1251");
               
               СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку();
               Пока СтрокаТекста <> Неопределено Цикл
                   
                   Если Найти(СтрокаТекста, "12:00") Тогда
                       СтрокаТекста = СтрЗаменить(СтрокаТекста, ",", Символы.ПС);
                       НовСтрока = ТЗ.Добавить();
                       НовСтрока.Город = Выборка.Город;
                       СтрокаДаты = СтрПолучитьСтроку(СтрокаТекста, 1);
                       НовСтрока.Период = Дата(Сред(СтрокаДаты, 1, 4), Сред(СтрокаДаты, 6, 2), Сред(СтрокаДаты, 9, 2));
                       НовСтрока.Температура = Число(СтрПолучитьСтроку(СтрокаТекста, 15));
26 Леха Дум
 
15.07.11
16:12
+(25) только вместо СтрокаТекста = СтрЗаменить(СтрокаТекста, ",", Символы.ПС);
нужно заменить "," на ";"
СтрокаТекста = СтрЗаменить(СтрокаТекста, ";", Символы.ПС);
27 Serginio1
 
15.07.11
16:18
(25) Разбор cvs это ДКА
28 Леха Дум
 
15.07.11
16:31
(27) очень хорошо, я знаю что включенная лампочка накаливания не является холодной, а по делу?
29 Serginio1
 
15.07.11
17:30
(28) Смотри (23)
30 Леха Дум
 
15.07.11
17:49
(29) Смотрел, смеялся... там местами Serg_1960 тебе тоже самое нарисовал что и я
31 Serginio1
 
15.07.11
17:53
Смейся смейся разбери строку своим методом простой
435,"7689900--"",,,369"
Где Delimiter="," и QuoteChar=""""
32 Reset
 
15.07.11
17:56
Забавно наблюдать, как народ, не найдя для какого-то случая подходящей встроенной функции, впадает в немощь.
33 Леха Дум
 
15.07.11
18:11
(31) если в компьютер ввести авно, то на выходе получишь корень квадратный из авна или авно в квадрате - знакомо? Я тебе таких ситуаций сам могу придумать.
1) разделитель просто выбери другой.
2) контролировать надо исходящий поток, а то так тебе и Войну и мир Толстого зальют и ты его разберешь
34 Serginio1
 
15.07.11
18:20
(33) Это реальный мир, т.к. строки могут содержать все что угодно. И формат CVS не я придумывал и в 7.7 это вшитая функция
(2) Это ты к чему?  Икота от смеха? ДКА это и есть разбор
Ну если ВОЙНа и мир не соответстуют формату вызовется исключение
Основная теорема систематики: Новые системы плодят новые проблемы.