Имя: Пароль:
1C
1C 7.7
v7: Полтергейст с записью в Excel
,
0 evgpinsk_
 
29.01.19
10:00
Странный глюк.
Открываю файл Exccell, записываю данные во 2й столбец, 1й столбец оставляю пустым, сохраняю файл. конец процедуры.

Открываю файл и в нём записанные данные вижу в 1м столбце.
Если же в процедуре заполняю и 1й столбец, то всё штатно.

Вот сам код:
Функция Сформировать()
    xl=createobject("Excel.Application");
    имяФ=ПутьКфайлу;
    wb2=xl.Workbooks.Open(имяФ,,0);        
    Лист2=wb2.sheets(1);//Первый лист
    
    xl.Displayalerts = 0;    
    xl.Cells.Select();
    xl.Selection.Delete(10);    //очищаем 10 строк
    wb2.SaveAs(имяФ);
    Лист2.Cells(1,2).Value="2";
    Лист2.Cells(1,1).Value="1";        //если эту строку закомменировать, то данные из 2го стообца оказывается в 1м стол
    wb2.SaveAs(имяФ);
    xl.ActiveWorkbook.close();
КонецФункции


Или ссылка на обработку:
https://dropmefiles.com/REqAt
1 Tatitutu
 
29.01.19
10:27
Все штатно работает
2 Tatitutu
 
29.01.19
10:28
с комментарием и без
(смотри в диспетчере задач - не висит ли EXCEL в процессах)
3 evgpinsk_
 
29.01.19
11:42
(1) Вы проверили у себя?
4 evgpinsk_
 
29.01.19
11:42
(2) Нет, не висит
5 evgpinsk_
 
30.01.19
11:33
Жаль зависла тема
6 НоваяВолна
 
30.01.19
11:47
(0) А зачем сохраняешь два раза?
7 Kigo_Kigo
 
30.01.19
11:50
(5) Что я делаю не так ?
https://yadi.sk/i/tCIIAe83jB5AkQ
8 Mikeware
 
30.01.19
12:01
(7) ты делаешь все правильно. а вот что делает ТС - загадка...
9 Kigo_Kigo
 
30.01.19
12:11
(8) Я взял его обработку, закомментил строку, которую он просил, отчет на скрине
10 Kigo_Kigo
 
30.01.19
12:15
Я думаю ТС пишет в один файл, смотрит в другой
11 Кирпич
 
30.01.19
12:23
Может первый столбец у него скрыт
12 Кирпич
 
30.01.19
12:24
Скриншота полтергейста то нету
13 evgpinsk_
 
30.01.19
17:03
(7) У екселя как бы много версий
14 evgpinsk_
 
30.01.19
17:10
http://prntscr.com/me9y3r
и сейчас попробую видео снять
15 evgpinsk_
 
30.01.19
17:15
https://dropmefiles.com/inaSD видео проблемы.
Я предполагал, что может быть проблема в офисе 2016
16 evgpinsk_
 
30.01.19
17:18
Ребята сори, перегрелся. Буду смотреть свою основную обработку
17 Ёпрст
 
30.01.19
17:57
(15) И ? где глюк то ?!
18 Ёпрст
 
30.01.19
17:57
опять наипалово
19 evgpinsk_
 
31.01.19
00:10
Нет, всётаки ещё не так со мной всё плачевно ).
Да, глюк действительно у Екселя /скорее всего именно моего варианта/ есть.
Один и тотже код 1с ведёт себя по разному.
Ссылка на видео:
https://dropmefiles.com/kKCDX

Плоховатое качество картинки, код практически тотже:
Функция Выполнить()
    xl=createobject("Excel.Application");
    wb2_=xl.Workbooks.Open(ПутьКфайлу,,0);        
    Лист2_=wb2_.sheets(1);//Первый лист
    xl.Displayalerts = 0;    
    xl.Cells.Select();
    xl.Selection.Delete(1446);
    wb2_.SaveAs(ПутьКфайлу);
    
    Лист2_.Cells(1,1).Value=1;
    Лист2_.Cells(1,2).Value=3;
    wb2_.SaveAs(ПутьКфайлу);
КонецФункции
20 Mikeware
 
31.01.19
07:22
(19) видео моргает и хрен что увидишь.
в чем проблема-то?
21 Кирпич
 
31.01.19
08:04
(19) да выспись уже, наконец :)
22 evgpinsk_
 
31.01.19
08:41
(20) Проблема что ИНОГДА, код Лист2_.Cells(1,1).Value=1; записывает значение во второй столбец.
Если же 1й столбец не пустой, то пишет во 2й столбец
23 Ёпрст
 
31.01.19
08:42
(22) неа, проблема в том, что иногда нужно F5 нажимать и перечитывать открытый документ
24 Mikeware
 
31.01.19
08:47
(21)изветный анекдот про листинг, и вопрос "где же у меня ошибка?"
©
25 evgpinsk_
 
31.01.19
08:50
(23) Не пойму, причём здесь обновление через F5?
26 Mikeware
 
31.01.19
08:51
(25) пишешь в открытый файл?
27 evgpinsk_
 
31.01.19
08:58
нет конечно. перед выполнением процесс ексель закрыт
28 evgpinsk_
 
31.01.19
09:02
И самое интересно, что с первой попытки код:
    Лист2_.Cells(1,1).Value=1;
    Лист2_.Cells(1,2).Value=3;
цифру 3 добавляет в ячейку 1.
а уже каждая последующая попытка отрабатывает нормально, цифра 1 в первой ячейке, цифра 3 во второй
29 Mikeware
 
31.01.19
09:08
(28) все прекрасно работает.
пишет туда, куда надо.
а в чем вообще цель кода, пишушего две цифры в известные две ячейки?
30 evgpinsk_
 
31.01.19
09:11
(29) Я понимаю, что этот код должен работать и работает в 98% случаев. Но у меня он не всегда работает.

И на видео это видно. И основная моя обработка также глючит. А выше просто пример для облегчения кода
31 evgpinsk_
 
31.01.19
09:14
Возможно связано с версией Офиса, или может "Office Tab" у меня глючит, не знаю.
Думал, может кто сталкивался с такой ситуацией
32 Кирпич
 
31.01.19
09:21
(30) на видео у тебя как раз всё правильно работает. где видео, в котором не работает?
33 Кирпич
 
31.01.19
09:25
Может проблема в том, что у тебя csv, а не xls и excel сохраняет только диапазон с реальными данными
34 Кирпич
 
31.01.19
09:25
задай имена колонок в первой строке
35 Кирпич
 
31.01.19
09:26
и нахрена для записи csv запускать махину Excel, если можно записать текстовый файлик и без него.
36 Mikeware
 
31.01.19
09:34
(35) "Если из всех инструментов у тебя есть только молоток, то в каждой проблеме ты увидишь гвоздь".
А если ты проктолог, то все задачи решаешь соотвественно :-) Что и делает ТС.
37 evgpinsk_
 
31.01.19
09:50
(32) сообщение (19)
38 evgpinsk_
 
31.01.19
09:51
(35) Выше сокращённый пример. Основной обработке нужен Ексель
39 Mikeware
 
31.01.19
09:52
(37) ну хотя бы видео нормально выклади. или скрины.
40 Вася Теркин
 
31.01.19
09:58
(14) Пять баллов друг! Спасибо, порадовал!
И как я тебя сразу не разглядел такого талантливого...
41 evgpinsk_
 
31.01.19
10:02
(40) Ещё раз объясняю, первая обработка также глючит. Просто проблема проявляется НЕ всегда. И когда позже я снимал первое видео, то не заметил, что в тот момент работало штатно
42 Вася Теркин
 
31.01.19
10:04
(39) Не надо. Я от первого видео уже...
43 evgpinsk_
 
31.01.19
10:08
(39) https://dropmefiles.com/pkxef
софтина в не очень хорошем разрешении пишет. но вроде как всё видно.
в 54 секунды уложился.
44 Mikeware
 
31.01.19
10:27
ну, в csv воспроизводится.
соглашусь.
хотя не понимаю, и не вижу ответа на Традиционный Китайский Вопрос...
45 evgpinsk_
 
31.01.19
10:34
(44) Гугл не знает, что за вопрос )
46 Mikeware
 
31.01.19
10:35
(45) "анахуа?"
47 evgpinsk_
 
31.01.19
10:52
(46) Ответ в (38). Есть и XLS файлы, которые нужно править
48 Mikeware
 
31.01.19
10:53
(47) ну тогда зачем ты правишь csv?
49 evgpinsk_
 
31.01.19
11:00
(48) отве в (30)
"И основная моя обработка также глючит. А выше просто пример для облегчения кода""
50 evgpinsk_
 
31.01.19
11:00
и в в (47) ответ. Есть xls файлы, которые мне нужно править
51 vova1122
 
31.01.19
11:06
Да, если писать в csv, то будет глючить. Если задать расширение xls, то отработает правильно. Проверь свою поделку при записи в ексель а не в csv.
52 evgpinsk_
 
31.01.19
11:13
(51) уже понял и в планах, чуть позже проверю.
53 evgpinsk_
 
31.01.19
12:49
(51) Да, если файл переименовать в xls то всё ок
54 evgpinsk_
 
31.01.19
13:30
Устал ).
если не ошибаюсь, изначально с xls отработало нормально. Но вот сейчас и с ним глючит.
http://prntscr.com/meoaul
http://prntscr.com/meobnb
55 vova1122
 
31.01.19
13:56
(54)Может через лишнее сохранение документа. Такого не должно быть. (или сам ексель чудит. Попробуйте открыть этот файлик на другом компе с другой версией екселя
56 Kigo_Kigo
 
31.01.19
15:19
(54) А откройка нам этот файлик блокнотом и покажи нам содержимое
57 evgpinsk_
 
31.01.19
15:40
58 Kigo_Kigo
 
31.01.19
15:45
(57) Все ясно, полтергейста тут никакого нет, файл csv это просто текст с разделителем,поставь в блокноте перед "5" знак ";" увидишь его во второй ячейке, а мы то тут бьемся
59 Kigo_Kigo
 
31.01.19
15:46
Если тебе нужен файл именно csv формата, то тут эксель не нужен, пиши значения прямо в текст с разделителем ";"
60 evgpinsk_
 
31.01.19
15:53
(58) Да, но почему тогда на первом видео код 1с сам ";" прописывает, т..е штатно. и тотже код на втором виде - нет.
Ну и таже проблема с xls файлами
61 evgpinsk_
 
31.01.19
15:58
Проблема с csv файлами - предположим разобрались, что в связке 1с-exccell иногда знак ";" не прописывается.

Но как объяснить тотже глюк с xls файлами?
62 Kigo_Kigo
 
31.01.19
16:02
(61) Файл CSV переименованный в xls, не становится xls, он все еще остается csv c расширением экселя, создай чистый файл экселя, и положи его вместо своего и все взлетит
63 evgpinsk_
 
31.01.19
16:40
(62) Верно. Скорее всего проблема в этом.
Ну а ситуция когда в один и тотже код 1с иногда и в csv пишет верно - спишем на барабашку )
64 vova1122
 
31.01.19
16:53
(63)  1с в csv всегда пишет верно (согласно ващему коду) и никаких ";" не ставит, если ты в коде этого не сделал.
А в екселе csv открывается по разному, потому, что ексель пытается анализировать то что ему подсовывают в файле csv и пробует разместить по ячейкам
65 Kigo_Kigo
 
31.01.19
16:54
(63) Это не барабашка, это как говорится - уже "замылился глаз", хотя что я несу, да, это барабашка, в рот ей компот :)
66 vova1122
 
31.01.19
17:02
(63) например запиши в свой csv файл (вручную) вот такую строку (примерно так должен выглядить файл csv с разделителями)
00025;000,25;0000,0025000;25000
и открой его екселем. Удивишься куда пропадают нули (но не все)
67 evgpinsk_
 
31.01.19
17:07
(66) Я это понимаю. Но барабашка пока гдето зарыта:

код
    Лист2_.Cells(1,1).Value=1;
    Лист2_.Cells(1,2).Value=3;
    Лист2_.Cells(1,3).Value=5;    
в CSV пишет так:  1;3;5

а код:
    Лист2_.Cells(1,1).Value=1;
    Лист2_.Cells(1,2).Value=3;
в CSV пишет так:  1    3
68 vova1122
 
31.01.19
17:08
(62) Экстрасенс. Я бы до такого не додумался что в файле поменял разрешение.
69 evgpinsk_
 
31.01.19
17:08
вот скрин:
http://prntscr.com/merti6
70 vova1122
 
31.01.19
17:09
(67) Барабашка в этой строке
71 vova1122
 
31.01.19
17:09
xl=createobject("Excel.Application");
72 evgpinsk_
 
31.01.19
17:12
(70) Объясните?
73 evgpinsk_
 
31.01.19
17:14
(67) Причём как и писал, только первая попытка выполнения кода работает не штатно  - (код 1с не добавляет знак ; в csv)

при втором и каждом последующем запуске обработки знак ; добавляется кодом 1с
74 vova1122
 
31.01.19
17:18
(72) xl=createobject("Excel.Application"); предназначен для работы с екселевкими файлами. И ты создаешь свой текстовый csv файл через ексель (например у тебя есть открит екселевский файл и ты делаешь в екселе: Файл/Сохранить как/ выбрать формат csv)
75 vova1122
 
31.01.19
17:20
Если так хочется писать в csv файл, то используй обект Текст (и в коде после каждого елемента не забывай вставлять разделитель.
Вот первая ссылка с описанием метода Текст http://www.about1c.ru/v77/for-developer/language-reference/complex-auxiliary-types/text
76 evgpinsk_
 
31.01.19
17:23
(74) Это не отвечает на вопрос:
Почему код:
    xl=createobject("Excel.Application");
    wb2_=xl.Workbooks.Open(ПутьКфайлу,,0);        
    Лист2_=wb2_.sheets(1);//Первый лист
    xl.Displayalerts = 0;    
    xl.Cells.Select();
    xl.Selection.Delete(1446);
    
    Лист2_.Cells(1,1).Value=1;
    Лист2_.Cells(1,2).Value=3;
    wb2_.SaveAs(ПутьКфайлу);

с 1й попытки знак ; не добавляет в файл CSV, но уже со 2й и каждой следующей добавляет
77 evgpinsk_
 
31.01.19
17:27
Со всем разобрался, тема пополнила багаж знаний. Но вот барабашка из (76) пока не понятна
78 vova1122
 
31.01.19
17:30
(76) а ты попробуй прямо из екселя сохранить в csv (оставив заполненной только одну ячейку), потом несколько ячеек. (увидишь разнику
79 Kigo_Kigo
 
31.01.19
17:33
(77) Там разделитель, табуляция, а как и почему это делает эксель не понятно, может какие параметры или команды ему дополнительно надо давать, чтобы он всегда делал раделитель один и тот же, а мы ему даем это делать самостоятельно(выбирать знак разделитель) как и по какому признаку он это делает я лично не знаю, знаю одно работать из 1С через ексель в тексте- то еще извращение :)
80 evgpinsk_
 
31.01.19
17:48
(78) Нет смысла. Мы говорим о том, что код 1с 1й раз работает одним способом. а второй раз /ничего не меняя/ - уже по другому.

А сохранение из екселя будет работать и первый раз и последующие одинаково
81 vova1122
 
31.01.19
18:10
(81) Нет. изменилось количество заполненных ячеек.
но суть не в том. Для текста есть объект Текст, для Екселя есть ЕксельАпликатион, Для того чтобы забить гроздь в доску есть молоток..... Поэтому для каждого случая нужно использовать свой инструмент
82 evgpinsk_
 
18.02.19
23:34
Всё-таки при работе с CSV чтение данных через
xl=createobject("Excel.Application");
имеет свои плюсы.

Не нужна замарачиваться с правильным прочтением данных из CSV формата, знак " Excell сам убирает.
А вот если читать данные через Текст, то приходится гемороится, чтобы корректно прочитать значения без знака "
83 Злопчинский
 
19.02.19
00:49
Даааа, Эксель это не в мотобол гонять...
84 Mikeware
 
19.02.19
07:12
(82) позовите программиста!©
85 Slypower
 
19.02.19
08:58
(82) Правда скорость чтения с csv быстрее, чтение без запуска exel, да и проблем меньше. Вот пример: в новых версиях ексель, установленных на компе, могут быть глюки при чтении чисел. Число 4,02 он может распознать на дату 4.02, а потом при преобразовании в число результат: 4.2, т.к. февраль - это 2й месяц. Наглядно видно при открытии файла cvs в екселе, там даты проставлены.
86 Kigo_Kigo
 
19.02.19
10:25
(82) Ну да вот ведь гемморой какой СтрЗаменить(Симв(34),"") :)
87 Arbuz
 
19.02.19
14:51
та. надо было создать объект corel draw и уже через него работать с файлом csv с измененным "разрешением" на xls. желательно в utf-16be. вообще без заморочек, само все проставляется и убирается.
88 evgpinsk_
 
19.02.19
15:41
(86) Уверены?
Т.е. мне нужны кавычки тоже заменить на запятую?
89 evgpinsk_
 
19.02.19
15:49
Да, есть относительно простой способ читать в Список строку CSV, заменим предварительно "ЗнакРазделителя" на запятую, а двойные кавычки например на одинарные.
Но трабл в том, что и двойные ковычки тоже нужны.

И соответственно код из 4х строчек уже усложняется. Я не говорю что это сложно написать, но использую Ексель вообще не нужно этих лишних движений
90 Kigo_Kigo
 
19.02.19
15:58
(88) (89) Ну и будете получать полтергейсты как в сабже, газовым ключом тоже можно автомобиль отремонтировать, но сцук не удобно
91 evgpinsk_
 
19.02.19
16:15
(90) Ну речь как бы не об этом. Был поднята тема, что через Ексель иногда возникают траблы и при работе с CSV файлами. Но зато не нужно замарачиваться с чтением значений из него, не нужно всякие преобразования и замена ковычек и т.д.

Если этот трабл можно решить, либо в других версиях трабл не проявляется, то не вижу проблем в определённых задачах использовать "гаечный ключ".
92 Kigo_Kigo
 
19.02.19
16:29
(91) Там сразу сказали, csv файл по сути не екселевский, а текст, и работать надо с ним как с текстом, я еще посмотрю как вы из екселя число с дробью для 1с-ки преобразовывать будете
93 Злопчинский
 
19.02.19
17:12
по мне так проще csv без всяких экселей обработать.
94 ДенисЧ
 
19.02.19
17:12
(93) А если будет "аа;бб";"цц" - проще? )))
95 evgpinsk_
 
19.02.19
17:31
(92) Надо кому? Ещё раз - есть разные задачи и разные варианты решений. То что CSV - текстовый документ - не отменяет возможности открывать его через Ексель.
И если бы не непонятный глюк, который наблюдается у меня, я бы с удовольствием использовал и дальше Ексель, а не гемороился с правильным чтением ковычек из CSV файла
96 evgpinsk_
 
19.02.19
17:36
(93) Чем проще?
В екселе я из любого места читаю Cells(строка, столбец). И значение читается сразу без ковычек, то что обычно и нужно.

Если читать ПРАВИЛЬНО CSV то нужно ещё дописать дополнительный обработчик CSV, который не из 3х строчек. И кстати в гугле я готовый так и не нашёл :)  /я не считаю правильным когда " заменяется на '/
97 Mikeware
 
20.02.19
08:08
(96) по большому счету, ексель надо покупать...
кстати, с CSV  можно через ADO работать
98 Salimbek
 
20.02.19
08:46
(96) Недавно только писал, код тут: В тупике... Чтение CSV с разделителями и всяким мусором
В той же ветке ссылка на Книгу знаний: Книга знаний: Преобразование csv в таблицу значений