Имя: Пароль:
1C
 
Как установить формат столбца в xls файле из 1С ?
0 blake
 
22.12.04
14:05
Собственно сабж.
Необходимо например в первом столбце установить формат даты.
И надо ли при этом знать количество строк? И как найти последнюю строку
1 laeg
 
22.12.04
14:12
2 blake
 
22.12.04
14:25
Открыть то как я знал давно. мне нужно установить формат всего столбца как дата.
3 laeg
 
22.12.04
14:32
VBA
Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy"

На 1с перевести ? :)))
4 blake
 
22.12.04
15:41
laeg переведи это на 1С. У меня плохо получается...
У меня пишит что не может установить свойство НамберФормат класса Ранге
5 Кортес
 
22.12.04
15:44
(4) Покажи свой код
6 NastyFrog
 
22.12.04
15:45
(4)сотвори в екселе макрос - посмотри, как он там пишет, может быть разница в региональных настройках
7 Бивень
 
22.12.04
15:49
(6) Настя, чего ты упрямая такая?
Мы ж с тобой уже беседовали по этому поводу ..., неужели из той беседы не понятно, что задачка эта в лоб не решается?
8 blake
 
22.12.04
15:55
Ну так как решить то эту задачку.
Я делал даже макрос.
на запись: выделял весь столбец А:А делал замену точки(.) на дробь(/) потом устанавливал фомат дата.
При применении макроса в Экселе у меня замена почему то происходила по всем столбцам. хрень какая то...
9 blake
 
22.12.04
15:56
думаю просто перебор значений делать по столбцу с первой строки по последнюю.
Но только не знаю как найти последнюю строку...
10 Оборотень
 
22.12.04
16:05
Это Ты в Замене что-то перемудрил наверное ...
какой МСофис у Тебя? а последнюю стоку можно глупым перебором найти
cells(1,n).value=""
11 blake
 
22.12.04
16:10
у меня самый простой ОффисХП.
Напишите кто нить простую процедурку для установки ячейке формата даты которая бы работала в 1С.
У меня так
Эксел = СоздатьОбъект("Excel.Application");
Файл = Эксел.Workbooks.Open(файл);
Лист = Файл.WorkSheets(1);
Лист.Range("A1:A10").NumberFormat = "dd/mm/yy";
Эксел.WorkBooks.close();
Эксел.Quit();
12 blake
 
22.12.04
16:12
Но тама говорит не может установить свойство НамберФормат класса Ранге
переписал ...
Эксел = СоздатьОбъект("Excel.Application");
Файл = Эксел.Workbooks.Open(файл);
Лист = Файл.WorkSheets(1);
Лист.Range("A1:A10").Select;
Лист.Selection.NumberFormat = "dd/mm/yy";
Эксел.WorkBooks.close();
Эксел.Quit();

тут ругается на  Переменная не определена (Selection)
13 laeg
 
22.12.04
16:15
(9)
Как определить, когда закончились данные на листе при загрузке данных из Excel
SpecialCells(11) - "последняя" ячейка
Например, если нужен номер строки последней ячейки, то LastRow=ExcelApp.Cells(1,1).SpecialCells(11).Row;
<сообщил AlexNik>

На счет
"Нельзя установить свойство NumberFormat класса Range"
попробую ...
Бивень факт знает ...
14 blake
 
22.12.04
16:16
ту ссылочку я тоже нашел (9).
Но это тоже бы перевести в 1С и что бы работало...
Как же так никто с Экселем не дружит ???
15 laeg
 
22.12.04
16:21
(14)
Когда дату по ОЛЕ в Ексель пишешь, то ячейка формат ячейки становиться типа Дата ...
16 blake
 
22.12.04
16:25
Из Эски я формирую простой реестр документов обычным отчетом, где в первом столбце дата(Дат = Формат(Расход.ДатаДок,"Д ДДММГГГГ");), и записываю в xls.
Потом хочу открыть его и установить экселевский формат даты.
17 Оборотень
 
22.12.04
16:28
(11) неправильно к объекту обращаещься, вот и не катит.

Напиши
Лист.Range("A1:A10").NumberFormat = "dd/mm/yy";
18 Бивень
 
22.12.04
16:29
(16) Дату - влево ...
19 Бивень
 
22.12.04
16:30
(17) Это не поможет ...
20 blake
 
22.12.04
16:33
(17)
Так и писал раньше, смотри (11)

(18)
Дату влево и то же самое "Нельзя установить свойство NumberFormat класса Range"
21 Бивень
 
22.12.04
16:35
(20) Если дата влево прибита, намберФормат можно убрать на фих ...
22 Можно и
 
22.12.04
16:37
Установить. Справку читай
23 Оборотень
 
22.12.04
16:38
(20) Сорри!!! не вчитался. сейчас сделаю модуль - выложу :)
24 laeg
 
22.12.04
16:38
(21)
хех не интересовался такими тонкостями раньше, щас смотрю ... дату по оле в ексель, прибита в право ... формат ячейки становится дата ...
25 Барбариска
 
22.12.04
16:40
(21)если убрать намберФормат в то место, куда ты говоришь, то дата там не получится. Может быть в качестве универсального решения попробовать через OLE записывать макрос, правильно форматирующий яячейки с датами, в Excel и Excel-ем его выполнять?
26 Бивень
 
22.12.04
16:48
(24) Я не про ОЛЕ говорил ... Ему она и не нужна ..., см. (16)
27 laeg
 
22.12.04
17:11
(26)
Воть пля проморгал ... точно-точно :))

Даже могу подсказать более, на хиппо была обработка MXL to XLS, работает корректно, переносит что даты, что числа с разделителями корректно.
28 blake
 
22.12.04
17:14
И где же решение сей проблемы...
Я уже опписался и опчитался всяких форумов, секретов и советов...
Тока результата ни какого
29 Бивень
 
22.12.04
17:15
(25) Блин! Второй раз я на том же дерьме подскользнулся ... :))
И ведь пару недель назад то всего, ты меня мордой в это тыкала ...
Стыдобищща! :((
30 Барбариска
 
22.12.04
17:19
(29) а вообще-то я поняла так, чта автор сначала записывает Xls штатными средствами, а потом через OLE поправляет. Кстати, есть забавный глюк, связанный с этим - в некоторых случаях 1С сама закрывает некоторые свои рабочие DBF...
31 blake
 
22.12.04
17:23
Поняла правильно.
Мне приходится после записи xls открывать его снова и вручную проделывать это -
в стлобце замена точки(.) на дробь(/) и делать формат даты. Тогда все получается.
Но хотелось бы это автоматизировать - надоело все руками да руками...
32 blake
 
22.12.04
17:25
Ну где же оборотень ......
33 Барбариска
 
22.12.04
17:33
(32) я конечно не оборотень, но посмотри это - может быть поможет))
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=2188
34 blake
 
22.12.04
17:52
Спасибо Барбариска, мож разберусь
35 ЭтоИмяЮзера Занято
 
22.12.04
17:57
ну дятлы. Английский знать надо - в справке все описано
36 Оборотень
 
22.12.04
18:23
(33) Он и сам так сможет
Я тут научился диапазон выделять до первой пустой ячейки, но заткнулся на замене. Никак не катит... Вот мои потуги ... остальное только завтра :)
Проверено - точно работает с первым столбцом

   Перем ИмяФ, ПутьФ;
   
   ФС.ВыбратьФайл(0,ИмяФ,ПутьФ,"Выберите файл",,"*.xls");
   
 ФайлЕксел=СоздатьОбъект("Excel.Application");
   НКнига=ФайлЕксел.Workbooks.Open(ПутьФ+ИмяФ);
   
   //НЯч=НКнига.Range("A1").End(-4121).Select(); //"xlDown"=-4121
   Лист=НКнига.Sheets("Лист1");
   //Выделить от первой ячейки до последнего значения (до пустой ячейки)
   Область=Лист.Range(Лист.Cells(1,1), Лист.Cells(1,1).End(-4121));//.Select() //"xlDown"=-4121
   //Установить формат в дату
 Область.NumberFormat = "dd/mm/yy;@";
37 Дурочка 1С
 
23.12.04
01:30
Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy"

На 1с перевести ? :)))

Excel.Columns("A:A").Select();//Выделить область
Excel.Selection.NumberFormat = "m/d/yyyy";//Формат ячейки:0.00-числовой,General-общий,@-текст,dd mm yy - формат даты
38 427
 
23.12.04
07:30
а с NumberFormat есть недокументированный прикол в Экселе... Его надо понять.. И все полетит...
39 Оборотень
 
23.12.04
08:56
(36)
прокрался глюк
вместо
Область.NumberFormat = "dd/mm/yy;@";

нужно писать

Область.NumberFormat = "ДД.ММ.ГГ;@";

Ты это хотел сказать в (38), а 427?
40 427
 
23.12.04
09:43
нет.
41 Оборотень
 
23.12.04
09:56
Вот этот кусок работает ... ну блин мыкрософт ... окуклится можно!!!

   ФС.ВыбратьФайл(0,ИмяФ,ПутьФ,"Выберите файл","Excell(*.xls)|*.xls","*.xls");
   
 ФайлЕксел=СоздатьОбъект("Excel.Application");
   НКнига=ФайлЕксел.Workbooks.Open(ПутьФ+ИмяФ);
   
   //НЯч=НКнига.Range("A1").End(-4121).Select(); //"xlDown"=-4121
   Лист=НКнига.Sheets("Лист1");
   //Выделить от первой ячейки до последнего значения (до пустой ячейки)
   Область=Лист.Range(Лист.Cells(1,1), Лист.Cells(1,1).End(-4121)); //"xlDown"=-4121
   //Заменить "." на "/"
   Область.Replace(".", "/", 2, 1, 0, 0);
   //Установить формат в дату
 Область.NumberFormat = "ДД/ММ/ГГ;@"
42 Оборотень
 
23.12.04
10:07
немного причесал кусок кода - понятнее выглядит

//Определим лист
   Лист=НКнига.Sheets("Лист1");
   //Определим ячейку от которой будем искать
   НЯч=Лист.Range("A1");
   //Выделить от определенной ячейки до последнего значения (до пустой ячейки) вниз
   //.End(xlDown) //"xlDown"=-4121 - вниз; "xlToLeft"=-4159 - влево; "xlToRight"=-4161 - вправо; "xlUp"=-4162 - вверх
   Область=Лист.Range(НЯч, НЯч.End(-4121));
   //Заменить "." на "/"
   Область.Replace(".", "/", 2, 1, 0, 0);
   //Установить формат в дату
 Область.NumberFormat = "ДД/ММ/ГГГГ;@";
43 blake
 
24.12.04
11:32
Оборотень а как на счет поиска последней строки.
LastRow=ExcelApp.Cells(1,1).SpecialCells(11).Row;
будет эта штука работать ?
44 blake
 
24.12.04
11:39
4121 это ког экселя - вниз до пустой ячейки ?
45 blake
 
24.12.04
11:39
4121 это код экселя - вниз до пустой ячейки ?
46 blake
 
24.12.04
11:53
Статью срочно в номер. Спасибо Оборотню.
Клевый чувак!
47 Оборотень
 
24.12.04
14:02
(44) точнее "-4121" это константа от экселя такая "xlDown" называется.
В 1С эти константы строчками не пишутся, приходится их значения искать :(
48 Оборотень
 
24.12.04
14:29
(43) Эта штука тоже будет работать :)
Вот для нее константы:
xlCellTypeAllFormatConditions    -4172
xlCellTypeAllValidation    -4174
xlCellTypeBlanks    4
xlCellTypeComments    -4144
xlCellTypeConstants    2
xlCellTypeFormulas    -4123
xlCellTypeLastCell    11
xlCellTypeSameFormatConditions    -4173
xlCellTypeSameValidation    -4175
xlCellTypeVisible    12
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.