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 ... |
|