|  16.09.2013, 12:18 | #1 | 
| Участник | 
			
			Сабж?  При простом book.Worksheets.Add добавляет лист в начало списка, если же написать book.Worksheets.Add('', book.Worksheets.Item(book.Sheets.Count), 1, -4167) то ошибка --------------------------- Microsoft Dynamics NAV Classic --------------------------- Сообщение для программистов C/AL: Не удалось вызвать член Add. Microsoft Excel возвратил следующее сообщение: Метод Add из класса Sheets завершен неверно | 
|  | 
|  16.09.2013, 19:49 | #2 | 
| Участник | 
			
			Сам не пробовал, нашел вот такое решение: http://stackoverflow.com/questions/1...od-not-working | 
|  | 
|  16.09.2013, 20:32 | #3 | 
| Участник | 
			
			Вместо кавычек в первом параметре нужно как-то передать NULL.   
		 | 
|  | 
|  17.09.2013, 06:35 | #4 | 
| Участник | 
			
			Присвоение значения параметров при вызове типа Add(After:=) по моеу чисто вбашная фишка. Врать не буду, но помоему даже в дельфи не работает, в навике точно, пробовал. InTacto, да-да, кэп?) Какие будут предложения?) Ну я пробовал создать переменную типа вэриант и ей сделать clear. Больше нет вариантов(( | 
|  | 
|  17.09.2013, 08:45 | #5 | 
| Участник | 
			
			В качестве обходного решения можно перемещать лист в конец списка командой Move после вставки листа в начало.
		 | 
|  | 
|  17.09.2013, 11:32 | #6 | 
| Участник | Цитата: 
		
			Сообщение от smoyk
			   Присвоение значения параметров при вызове типа Add(After:=) по моеу чисто вбашная фишка. Врать не буду, но помоему даже в дельфи не работает, в навике точно, пробовал. InTacto, да-да, кэп?) Какие будут предложения?) Ну я пробовал создать переменную типа вэриант и ей сделать clear. Больше нет вариантов(( Дело не в явном указании названия параметра, а в пропуске самого параметра. Это позволяет сделать многие объктные языки (vb6, vb.net, c#) В навике (по крайней мере до 5 версии) пропуск параметров, к сожалению, табу. В работе с ADO можно получить NULL или написать библиотечку, которая вызывает эту ф-цию. | 
|  | 
|  17.09.2013, 12:56 | #7 | 
| Участник | 
			
			chebv, Вы не поверите) Та же самая ошибка и с мувом, видимо по той же причине, т.к. там два параметра, before и after. InTacto, Ну что то же надо было поставить) Понятно, что как бэ лучше null, но нула в навике нет, поэтому и стоят кавычки) Хотя бы компилятор схавал. А что еще поставить я не знаю, поэтому и спросил про предложения, какие есть.... В работе с адо вы имеете ввиду через селект нул вернуть? Или как?) | 
|  | 
|  17.09.2013, 13:25 | #8 | 
| Участник | 
			
			Кстати, коллеги мне подсказывают, что у нас 6й нав) Можно параметр пропустить при вызове? Как?
		 | 
|  | 
|  17.09.2013, 13:30 | #9 | 
| Участник | Цитата: 
		
			Сообщение от smoyk
			   chebv, Вы не поверите) Та же самая ошибка и с мувом, видимо по той же причине, т.к. там два параметра, before и after. InTacto, Ну что то же надо было поставить) Понятно, что как бэ лучше null, но нула в навике нет, поэтому и стоят кавычки) Хотя бы компилятор схавал. А что еще поставить я не знаю, поэтому и спросил про предложения, какие есть.... В работе с адо вы имеете ввиду через селект нул вернуть?  /> Еще можно макрос написать прям из навика в книгу и сделать его вызов, но должно быть разрещено выполнение макросов. | 
|  | 
|  17.09.2013, 13:41 | #10 | 
| Участник | 
			
			Не, ну так то и просто "select null" работает, но это какойто индусский код( А что с пропуском параметров? | 
|  | 
|  17.09.2013, 17:24 | #11 | 
| Участник | 
			
			Извращение конечно, но можно так: сначала NewSheet.Move(SheetEnd), т.е. новый лист становится предпоследним, а затем SheetEnd.Move(NewSheet)    | 
|  | 
|  18.09.2013, 06:10 | #12 | 
| Участник | |
|  | 
|  18.09.2013, 17:30 | #13 | 
| Участник | 
			
			расскажите как правильно юзать функцию _БордерАроунд
		 | 
|  | 
|  18.09.2013, 17:43 | #14 | 
| Участник | 
			
			вообще нужно вот такую вот вызгрузку в ексель сделать. как поля вписать я понимаю, а вот как сделать обрамление и перенос хз..   | 
|  | 
|  18.09.2013, 18:04 | #15 | 
| Участник | 
			
			Задать границы Код: SetBorder(xlRowIDPar : Integer;xlColIDPar : Integer;Border : Integer)
// Стандартные индексы границ ячейки Excel
// 1. xlEdgeLeft         = 7  (левая)
// 2. xlEdgeRight        = 10 (правая)
// 3. xlEdgeTop          = 8  (верхняя)
// 4. xlEdgeBottom       = 9  (нижняя)
// 5. xlDiagonalDown     = 5  (диагональ лево верх - право низ)
// 6. xlDiagonalUp       = 6  (диагональ право верх - лево низ)
// Задается стиль линии: 1 - обычная сплошная
CASE Border OF
1: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).LineStyle := 1; 
2: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(10).LineStyle := 1;
3: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(8).LineStyle := 1;
4: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(9).LineStyle := 1;
5: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(5).LineStyle := 1;
6: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(6).LineStyle := 1;
END;
// толщины линий для каждой стороны задаются через св-во Weight
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).Weight = 3
// обрамляющая, заполняются все 4 стороны
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.LineStyle := 1;
GetxlColID(ColumnNo : Integer) : Text[30]
xlColIDLoc := '';
IF ColumnNo <> 0 THEN BEGIN
  x := ColumnNo - 1;
  c := 65 + x MOD 26;
  xlColIDLoc[10] := c;
  i := 10;
  WHILE x > 25 DO BEGIN
    x := x DIV 26;
    i := i - 1;
    c := 64 + x MOD 26;
    xlColIDLoc[i] := c;
  END;
  FOR x := i TO 10 DO
    xlColIDLoc[1+x-i] := xlColIDLoc[x];
END;
EXIT(xlColIDLoc);
GetxlRowID(RowNo : Integer) : Text[30]
xlRowIDLoc := '';
IF RowNo <> 0 THEN
  xlRowIDLoc := FORMAT(RowNo);
EXIT(xlRowIDLoc);Код: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).WrapText := TRUE; | 
|  | 
|  18.09.2013, 18:48 | #16 | 
| Участник | Цитата: 
		
			Сообщение от InTacto
			   Задать границы Код: SetBorder(xlRowIDPar : Integer;xlColIDPar : Integer;Border : Integer)
// Стандартные индексы границ ячейки Excel
// 1. xlEdgeLeft         = 7  (левая)
// 2. xlEdgeRight        = 10 (правая)
// 3. xlEdgeTop          = 8  (верхняя)
// 4. xlEdgeBottom       = 9  (нижняя)
// 5. xlDiagonalDown     = 5  (диагональ лево верх - право низ)
// 6. xlDiagonalUp       = 6  (диагональ право верх - лево низ)
// Задается стиль линии: 1 - обычная сплошная
CASE Border OF
1: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).LineStyle := 1; 
2: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(10).LineStyle := 1;
3: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(8).LineStyle := 1;
4: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(9).LineStyle := 1;
5: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(5).LineStyle := 1;
6: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(6).LineStyle := 1;
END;
// толщины линий для каждой стороны задаются через св-во Weight
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).Weight = 3
// обрамляющая, заполняются все 4 стороны
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.LineStyle := 1;
GetxlColID(ColumnNo : Integer) : Text[30]
xlColIDLoc := '';
IF ColumnNo <> 0 THEN BEGIN
  x := ColumnNo - 1;
  c := 65 + x MOD 26;
  xlColIDLoc[10] := c;
  i := 10;
  WHILE x > 25 DO BEGIN
    x := x DIV 26;
    i := i - 1;
    c := 64 + x MOD 26;
    xlColIDLoc[i] := c;
  END;
  FOR x := i TO 10 DO
    xlColIDLoc[1+x-i] := xlColIDLoc[x];
END;
EXIT(xlColIDLoc);
GetxlRowID(RowNo : Integer) : Text[30]
xlRowIDLoc := '';
IF RowNo <> 0 THEN
  xlRowIDLoc := FORMAT(RowNo);
EXIT(xlRowIDLoc);Код: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).WrapText := TRUE; | 
|  | 
|  19.09.2013, 16:39 | #17 | 
| Участник | 
			
			Ребят, как задать цикл, который будет выводить допустим всех сотрудников, для каждого сотрудника свое поле, голова совсем не варит как то
		 | 
|  | 
|  19.09.2013, 16:56 | #18 | 
| Участник | 
			
			Можно рекордрефы использовать, но заранее нужно прописать где-то, например, в том же сотруднике в каком-нибудь поле, номер поля, значение которого нужно выводить.  Если правильно понял задачу | 
|  | 
|  19.09.2013, 16:57 | #19 | 
| Участник | 
			
			И вроде как нужно под каждый вопрос новую тему заводить, чтобы потом искать проще было
		 | 
|  | 
|  20.09.2013, 08:39 | #20 | 
| Участник | Цитата: Код: REPEAT
  xlSheet.Range('A' + FORMAT(i)).Value := ...
  xlSheet.Range('B' + FORMAT(i)).Value := ...
  ...
  i += 1;
UNTIL ... | 
|  |