Word.application: Как Получить Индекс Таблицы?

Eugen

Well-known member
22.03.2012
177
0
#1
Добрый день.

Делаю небольшой вордовый отчет по шаблону, который собирает данные из коллекции документов. В шаблоне есть поле, на место которого вставляется таблица. В будущем не исключена ситуация, что в этот шаблон будет добавлена какая-нибудь другая таблица.

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
Код:
Dim ws As New NotesUIWorkspace
Dim ses As New NotesSession
Dim wApp As Variant
Dim wDoc As Variant
Dim wTable As Variant
Dim wRange As Variant
Dim i As Long
Dim res As Boolean
Dim curDB As NotesDatabase
Dim doc_1 As NotesDocument
Dim doc_2 As NotesDocument
Dim someDocColl As NotesDocumentCollection

Set curDB = ses.Currentdatabase
Set doc_1 = ws.Currentdocument.Document
Set someDocColl = db.Getview("someView").Getalldocumentsbykey(doc_1.Universalid, True)
Set wApp = CreateObject("Word.Arrlication")
Set wDoc = wApp.Documents.Add("C:\123.doc")


For i=1 To wDoc.FormFields.Count
If wDoc.FormFields(i).Name = "tableAnchor" Then
res = True
End If
Next

Set doc_2 = someDocColl.Getfirstdocument()
While Not doc_2 Is Nothing
If res Then
'если такое поле найдено, то берем range от него
Set wRange = wDoc.FormFields("tableAnchor").Range
Set wTable = wDoc.Tables.Add(wRange, 1, 3)
Else
'если поля нет, добавляем в конец документа
Call wDoc.Characters(wDoc.Characters.Count).Select
Set wRange = wDoc.Application.Selection.Range
End If

'дальше таблица будет наполнена какими то данными


Set doc_2 = someDocColl.Getnextdocument(doc_2)
Wend
Проблема в следующем: если в шаблоне появляется еще одна таблица, как мне идентифицировать именно мою, программно формируемую, и к ней добавлять строки? Если точнее, как получить индекс объекта Table? Смотрел хелп Word - свойства "Descr" и "Title" для меня не применимы, т.к. они появились только с 2010. Свойство "ID", как там написано, применимо только для документа, сохраненного как веб-страница.
ЗЫ: Если коряво - прошу не пинать, объяснил как смог. Про POI слышал, но не мой вариант.
 

swyatogor

Lotus team
24.02.2014
479
10
#2
а если пойти другим путём?? заполнять таблицу в экселе))) а потом копипастить в то место где стоит (куда указывает) поле?
 

susinmn

Well-known member
16.10.2007
529
3
#3
Добрый день.

Делаю небольшой вордовый отчет по шаблону, который собирает данные из коллекции документов. В шаблоне есть поле, на место которого вставляется таблица. В будущем не исключена ситуация, что в этот шаблон будет добавлена какая-нибудь другая таблица.

...

Проблема в следующем: если в шаблоне появляется еще одна таблица, как мне идентифицировать именно мою, программно формируемую, и к ней добавлять строки? Если точнее, как получить индекс объекта Table? Смотрел хелп Word - свойства "Descr" и "Title" для меня не применимы, т.к. они появились только с 2010. Свойство "ID", как там написано, применимо только для документа, сохраненного как веб-страница.
ЗЫ: Если коряво - прошу не пинать, объяснил как смог. Про POI слышал, но не мой вариант.
Set wordAppObject = CreateObject("Word.Application")
Set ActiveDocument = wordAppObject.Documents.Add(TempFile)

Set DrawTable = ActiveDocument.Tables(n)

Добавление строк и заполнение:
DrawTable.Rows.Add
DrawTable.Cell(i+2,1).Range.InsertAfter 'Тут текст'
 

swyatogor

Lotus team
24.02.2014
479
10
#4
У мну большое подозрение что нас спрашивают чуток про другое))
Я подозреваю что в шаблоне уже стоит таблица которую нужно заполнить.. и нас спрашивают, что делать если в шаблоне будет не одна таблица под заполнение, а несколько??.. Если я правильно понял - то Вы в корне не правильно делаете.. Вы (я так опять же понял) привязываетесь к таблице по ее якорю, соответственно хапаете первый попавшийся и на него завязываетесь.. это Вас и пугает.
Для позиционирования в документе ворда обычно применяют закладки.. при работе с таким доком - позиционируют курсор на нужную закладку (причем не обязательно по порядку их следования в доке), стирают её и вместо неё помещают то, что необходимо..

типа вот так
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
Код:
	Set wObj = Createobject("Word.Application")
'	wObj.Visible = True
TmpDocName = Environ("Temp") & "\" & TmpDocName
Call 	object.ExtractFile(tmpDocname)
'	Msgbox tmpDocname
wObj.Documents.Add TmpDocName ' работа с шаблоном (открытие файла)
' bookmark01 – имя закладки определенной в MS Word
' начинаем заполнение документа
Set wordoc = wobj.activedocument 
wObj.Selection.GoTo wdGoToBookmark, , , "date" 'переход к закладке
wObj.Selection.Delete wdCharacter, 1 ' удаление закладки и текста закладки, курсор остается на месте закладки
wObj.Selection.TypeText datetostring(uidoc.Document.GetItemValue("Date_doc")(0),3)
wObj.Selection.GoTo wdGoToBookmark, , , "from" 'переход к закладке
wObj.Selection.Delete wdCharacter, 1 ' удаление закладки и текста закладки, курсор остается на месте закладки
wObj.Selection.TypeText (uidoc.FieldGetText("user"))


Добавлено: <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">для работы кода нужна будет вот такая библиотечка</div></div><div class="sp-body"><div class="sp-content">
Код:
'Библиотека wdConst
'Константы для MS Word

Const wdAlignPageNumberLeft			=0
Const wdAlignPageNumberCenter		 =1
Const wdAlignPageNumberRight		  =2
Const wdAlignPageNumberInside		 =3
Const wdAlignPageNumberOutside		 =4

Const wdBorderTop		 =-1
Const wdBorderLeft		 =-2
Const wdBorderBottom	  =-3
Const wdBorderRight		=-4
Const wdBorderHorizontal  =-5
Const wdBorderVertical	 =-6

Const wdBorderDiagonalDown	=-7
Const wdBorderDiagonalUp	 =-8

Const wdStyleTypeParagraph  =1
Const wdStyleTypeCharacter  =2

Const wdCharacter			=1
Const wdWord				 =2
Const wdSentence			 =3
Const wdParagraph			=4
Const wdLine				 =5
Const wdStory				=6
Const wdScreen			  =7
Const wdSection			 =8
Const wdColumn			  =9
Const wdRow				 =10
Const wdWindow			  =11
Const wdCell				 =12
Const wdCharacterFormatting =13
Const wdParagraphFormatting =14
Const wdTable				=15
Const wdItem				 =16

Const wdRowHeightAuto	  =0
Const wdRowHeightAtLeast	=1
Const wdRowHeightExactly	=2

Const wdInsertCellsShiftRight		=0
Const wdInsertCellsShiftDown		 =1
Const wdInsertCellsEntireRow		 =2
Const wdInsertCellsEntireColumn	 =3

Const wdDeleteCellsShiftLeft		 =0
Const wdDeleteCellsShiftUp		  =1
Const wdDeleteCellsEntireRow		 =2
Const wdDeleteCellsEntireColumn	 =3

Const wdAdjustNone			 =0
Const wdAdjustProportional	 =1
Const wdAdjustFirstColumn	  =2
Const wdAdjustSameWidth		 =3

Const wdAlignParagraphLeft	 =0
Const wdAlignParagraphCenter	=1
Const wdAlignParagraphRight	 =2
Const wdAlignParagraphJustify  =3

Const wdAlignParagraphDistribute =4

Const wdAlignRowLeft			=0
Const wdAlignRowCenter		 =1
Const wdAlignRowRight		  =2

Const wdAlignTabLeft			=0
Const wdAlignTabCenter		 =1
Const wdAlignTabRight		  =2
Const wdAlignTabDecimal		 =3
Const wdAlignTabBar			 =4
Const wdAlignTabList			=6

Const wdAlignVerticalTop		=0
Const wdAlignVerticalCenter	 =1
Const wdAlignVerticalJustify	=2
Const wdAlignVerticalBottom	 =3

Const wdCellAlignVerticalTop	=0
Const wdCellAlignVerticalCenter =1
Const wdCellAlignVerticalBottom =3

Const wdPageBreak				 =7

Const wdWindowStateNormal	 =0
Const wdWindowStateMaximize  =1
Const wdWindowStateMinimize  =2
Const wdKeyPause			  =19
Const wdKeyEsc				 =27
Const wdKeySpacebar			=32
Const wdKeyPageUp			 =33
Const wdKeyPageDown			=34
Const wdKeyEnd				 =35
Const wdKeyHome				=36
Const wdKeyInsert			 =45
Const wdKeyDelete			 =46
Const wdKeyNumeric0			=96
Const wdKeyNumeric1			=97
Const wdKeyNumeric2			=98
Const wdKeyNumeric3			=99
Const wdKeyNumeric4			=100
Const wdKeyNumeric5			=101
Const wdKeyNumeric6			=102
Const wdKeyNumeric7			=103
Const wdKeyNumeric8			=104
Const wdKeyNumeric9			=105
Const wdKeyNumericMultiply	 =106
Const wdKeyNumericAdd		 =107
Const wdKeyNumericSubtract	 =109
Const wdKeyNumericDecimal	 =110
Const wdKeyNumericDivide	  =111
Const wdKeyF1				 =112
Const wdKeyF2				 =113
Const wdKeyF3				 =114
Const wdKeyF4				 =115
Const wdKeyF5				 =116
Const wdKeyF6				 =117
Const wdKeyF7				 =118
Const wdKeyF8				 =119
Const wdKeyF9				 =120
Const wdKeyF10				 =121
Const wdKeyF11				 =122
Const wdKeyF12				 =123
Const wdKeyF13				 =124
Const wdKeyF14				 =125
Const wdKeyF15				 =126
Const wdKeyF16				 =127
Const wdKeyScrollLock		 =145
Const wdKeySemiColon		  =186
Const wdKeyEquals			 =187
Const wdKeyComma			  =188
Const wdKeyHyphen			 =189
Const wdKeyPeriod			 =190
Const wdKeySlash			  =191
Const wdKeyBackSingleQuote	 =192
Const wdKeyOpenSquareBrace	 =219
Const wdKeyBackSlash		  =220
Const wdKeyCloseSquareBrace	=221
Const wdKeySingleQuote		 =222

Const wdOLELink	 =0
Const wdOLEEmbed	 =1
Const wdOLEControl  =2

Const wdOLEVerbPrimary			 =0
Const wdOLEVerbShow				=-1
Const wdOLEVerbOpen				=-2
Const wdOLEVerbHide				=-3
Const wdOLEVerbUIActivate		 =-4
Const wdOLEVerbInPlaceActivate	 =-5
Const wdOLEVerbDiscardUndoState	=-6

Const wdInLine			=0
Const wdFloatOverText	 =1

Const wdLeftPortrait	 =0
Const wdCenterPortrait	=1
Const wdRightPortrait	 =2
Const wdLeftLandscape	 =3
Const wdCenterLandscape  =4
Const wdRightLandscape	=5
Const wdLeftClockwise	 =6
Const wdCenterClockwise  =7
Const wdRightClockwise	=8

Const wdFullBlock		 =0
Const wdModifiedBlock	 =1
Const wdSemiBlock		 =2

Const wdLetterTop		 =0
Const wdLetterBottom	 =1
Const wdLetterLeft		=2
Const wdLetterRight	  =3

Const wdSalutationInformal =0
Const wdSalutationFormal	=1
Const wdSalutationBusiness =2
Const wdSalutationOther	 =3

Const wdGenderFemale	 =0
Const wdGenderMale	  =1
Const wdGenderNeutral	=2
Const wdGenderUnknown	=3

Const wdMove			 =0
Const wdExtend		  =1

Const wdUn			  =9999999
Const wdToggle		  =9999998
Const wdForward		 =1073741823
Const wdBackward		 =-1073741823
Const wdAutoPosition	 =0
Const wdFirst			=1
Const wdCreatorCode	 =1297307460

Const wdPasteOLEObject				 =0
Const wdPasteRTF					  =1
Const wdPasteText					 =2
Const wdPasteMetafilePicture		  =3
Const wdPasteBitmap					=4
Const wdPasteDeviceIndependentBitmap  =5
Const wdPasteHyperlink				 =7
Const wdPasteShape					 =8
Const wdPasteEnhancedMetafile		 =9

Const wdPrintDocumentContent	=0
Const wdPrintProperties		 =1
Const wdPrintComments		  =2
Const wdPrintStyles			 =3
Const wdPrintAutoTextEntries	=4
Const wdPrintKeyAssignments	 =5
Const wdPrintEnvelope		  =6

Const wdPrintAllPages		  =0
Const wdPrintOddPagesOnly	  =1
Const wdPrintEvenPagesOnly	 =2

Const wdPrintAllDocument		=0
Const wdPrintSelection		 =1
Const wdPrintCurrentPage		=2
Const wdPrintFromTo			 =3
Const wdPrintRangeOfPages	  =4

Const wdSpelling				=0
Const wdGrammar				 =1
Const wdThesaurus			  =2
Const wdHyphenation			 =3
Const wdSpellingComplete		=4
Const wdSpellingCustom		 =5
Const wdSpellingLegal		  =6
Const wdSpellingMedical		 =7

Const wdHangulHanjaConversion		 =8
Const wdHangulHanjaConversionCustom  =9

Const wdSpellword		  =0
Const wdWildcard			=1
Const wdAnagram			 =2

Const wdSpellingCorrect			=0
Const wdSpellingNotInDictionary	=1
Const wdSpellingCapitalization	 =2

Const wdSpellingError	  =0
Const wdGrammaticalError	=1

Const wdInlineShapeEmbeddedOLEObject =1
Const wdInlineShapeLinkedOLEObject	=2
Const wdInlineShapePicture			=3
Const wdInlineShapeLinkedPicture	 =4
Const wdInlineShapeOLEControlObject  =5

Const wdTiled			=0
Const wdIcons			=1

Const wdSelStartActive  =1
Const wdSelAtEOL		 =2
Const wdSelOvertype	 =4
Const wdSelActive		=8
Const wdSelReplace	  =16

Const wdAutoVersionOff	  =0
Const wdAutoVersionOnClose  =1

Const wdOrganizerObjectStyles		 =0
Const wdOrganizerObjectAutoText	  =1
Const wdOrganizerObjectCommandBars	=2
Const wdOrganizerObjectProjectItems  =3

Const wdMatchParagraphMark	  =65551
Const wdMatchTabCharacter		=9
Const wdMatchCommentMark		 =5
Const wdMatchAnyCharacter		=65599
Const wdMatchAnyDigit			=65567
Const wdMatchAnyLetter		  =65583
Const wdMatchCaretCharacter	 =11
Const wdMatchColumnBreak		 =14
Const wdMatchEmDash			 =8212
Const wdMatchEnDash			 =8211
Const wdMatchEndnoteMark		 =65555
Const wdMatchField			  =19
Const wdMatchFootnoteMark		=65554
Const wdMatchGraphic			 =1
Const wdMatchManualLineBreak	 =65551
Const wdMatchManualPageBreak	 =65564
Const wdMatchNonbreakingHyphen  =30
Const wdMatchNonbreakingSpace	=160
Const wdMatchOptionalHyphen	 =31
Const wdMatchSectionBreak		=65580
Const wdMatchWhiteSpace		 =65655

Const wdFindStop	  =0
Const wdFindContinue  =1
Const wdFindAsk		=2

Const wdActiveEndAdjustedPageNumber				 =1
Const wdActiveEndSectionNumber					 =2
Const wdActiveEndPageNumber						 =3
Const wdNumberOfPagesInDocument					 =4
Const wdHorizontalPositionRelativeToPage			=5
Const wdVerticalPositionRelativeToPage			 =6
'Const wdHorizontalPositionRelativeToTextBoundary	=7
'Const wdVerticalPositionRelativeToTextBoundary	 =8
Const wdFirstCharacterColumnNumber				 =9
Const wdFirstCharacterLineNumber					=10
Const wdFrameIsSelected							 =11
Const wdWithInTable								 =12
Const wdStartOfRangeRowNumber					  =13
Const wdEndOfRangeRowNumber						 =14
Const wdMaximumNumberOfRows						 =15
Const wdStartOfRangeColumnNumber					=16
Const wdEndOfRangeColumnNumber					 =17
Const wdMaximumNumberOfColumns					 =18
Const wdZoomPercentage							 =19
Const wdSelectionMode							  =20
Const wdCapsLock									=21
Const wdNumLock									 =22
Const wdOverType									=23
Const wdRevisionMarking							 =24
Const wdInFootnoteEndnotePane					  =25
Const wdInCommentPane							  =26
Const wdInHeaderFooter							 =28
Const wdAtEndOfRowMarker							=31
Const wdReferenceOfType							 =32
Const wdHeaderFooterType							=33
Const wdInMasterDocument							=34
Const wdInFootnote								 =35
Const wdInEndnote								  =36
Const wdInWordMail								 =37
Const wdInClipboard								 =38

Const wdWrapSquare		 =0
Const wdWrapTight		  =1
Const wdWrapThrough		 =2
Const wdWrapNone			=3
Const wdWrapTopBottom	  =4

Const wdWrapBoth			=0
Const wdWrapLeft			=1
Const wdWrapRight		  =2
Const wdWrapLargest		 =3

Const wdOutlineLevel1			=1
Const wdOutlineLevel2			=2
Const wdOutlineLevel3			=3
Const wdOutlineLevel4			=4
Const wdOutlineLevel5			=5
Const wdOutlineLevel6			=6
Const wdOutlineLevel7			=7
Const wdOutlineLevel8			=8
Const wdOutlineLevel9			=9
Const wdOutlineLevelBodyText	 =10

Const wdTextOrientationHorizontal  =0
Const wdTextOrientationUpward	  =2
Const wdTextOrientationDownward	 =3

'Const wdTextOrientationVerticalFarEast			=1
'Const wdTextOrientationHorizontalRotatedFarEast  =4

Const wdArtApples			 =1
Const wdArtMapleMuffins		=2
Const wdArtCakeSlice		  =3
Const wdArtCandyCorn		  =4
Const wdArtIceCreamCones	  =5
Const wdArtChampagneBottle	 =6
Const wdArtPartyGlass		 =7
Const wdArtChristmasTree	  =8
Const wdArtTrees			  =9
Const wdArtPalmsColor		 =10
Const wdArtBalloons3Colors	 =11
Const wdArtBalloonsHotAir	 =12
Const wdArtPartyFavor		 =13
Const wdArtConfettiStreamers  =14
Const wdArtHearts			 =15
Const wdArtHeartBalloon		=16
Const wdArtStars3D			 =17
Const wdArtStarsShadowed	  =18
Const wdArtStars			  =19
Const wdArtSun				 =20
Const wdArtEarth2			 =21
Const wdArtEarth1			 =22
Const wdArtPeopleHats		 =23
Const wdArtSombrero			=24
Const wdArtPencils			 =25
Const wdArtPackages			=26
Const wdArtClocks			 =27
Const wdArtFirecrackers		=28
Const wdArtRings			  =29
Const wdArtMapPins			 =30
Const wdArtConfetti			=31
Const wdArtCreaturesButterfly =32
Const wdArtCreaturesLadyBug	=33
Const wdArtCreaturesFish	  =34
Const wdArtBirdsFlight		 =35
Const wdArtScaredCat		  =36
Const wdArtBats				=37
Const wdArtFlowersRoses		=38
Const wdArtFlowersRedRose	 =39
Const wdArtPoinsettias		 =40
Const wdArtHolly			  =41
Const wdArtFlowersTiny		 =42
Const wdArtFlowersPansy		=43
Const wdArtFlowersModern2	 =44
Const wdArtFlowersModern1	 =45
Const wdArtWhiteFlowers		=46
Const wdArtVine				=47
Const wdArtFlowersDaisies	 =48
Const wdArtFlowersBlockPrint  =49
Const wdArtDecoArchColor	  =50
Const wdArtFans				=51
Const wdArtFilm				=52
Const wdArtLightning1		 =53
Const wdArtCompass			 =54
Const wdArtDoubleD			 =55
Const wdArtClassicalWave	  =56
Const wdArtShadowedSquares	 =57
Const wdArtTwistedLines1	  =58
Const wdArtWaveline			=59
Const wdArtQuadrants		  =60
Const wdArtCheckedBarColor	 =61
Const wdArtSwirligig		  =62
Const wdArtPushPinNote1		=63
Const wdArtPushPinNote2		=64
Const wdArtPumpkin1			=65
Const wdArtEggsBlack		  =66
Const wdArtCup				 =67
Const wdArtHeartGray		  =68
Const wdArtGingerbreadMan	 =69
Const wdArtBabyPacifier		=70
Const wdArtBabyRattle		 =71
Const wdArtCabins			 =72
Const wdArtHouseFunky		 =73
Const wdArtStarsBlack		 =74
Const wdArtSnowflakes		 =75
Const wdArtSnowflakeFancy	 =76
Const wdArtSkyrocket		  =77
Const wdArtSeattle			 =78
Const wdArtMusicNotes		 =79
Const wdArtPalmsBlack		 =80
Const wdArtMapleLeaf		  =81
Const wdArtPaperClips		 =82
Const wdArtShorebirdTracks	 =83
Const wdArtPeople			 =84
Const wdArtPeopleWaving		=85
Const wdArtEclipsingSquares2  =86
Const wdArtHypnotic			=87
Const wdArtDiamondsGray		=88
Const wdArtDecoArch			=89
Const wdArtDecoBlocks		 =90
Const wdArtCirclesLines		=91
Const wdArtPapyrus			 =92
Const wdArtWoodwork			=93
Const wdArtWeavingBraid		=94
Const wdArtWeavingRibbon	  =95
Const wdArtWeavingAngles	  =96
Const wdArtArchedScallops	 =97
Const wdArtSafari			 =98
Const wdArtCelticKnotwork	 =99
Const wdArtCrazyMaze		  =100
Const wdArtEclipsingSquares1  =101
Const wdArtBirds			  =102
Const wdArtFlowersTeacup	  =103
Const wdArtNorthwest		  =104
Const wdArtSouthwest		  =105
Const wdArtTribal6			 =106
Const wdArtTribal4			 =107
Const wdArtTribal3			 =108
Const wdArtTribal2			 =109
Const wdArtTribal5			 =110
Const wdArtXIllusions		 =111
Const wdArtZanyTriangles	  =112
Const wdArtPyramids			=113
Const wdArtPyramidsAbove	  =114
Const wdArtConfettiGrays	  =115
Const wdArtConfettiOutline	 =116
Const wdArtConfettiWhite	  =117
Const wdArtMosaic			 =118
Const wdArtLightning2		 =119
Const wdArtHeebieJeebies	  =120
Const wdArtLightBulb		  =121
Const wdArtGradient			=122
Const wdArtTriangleParty	  =123
Const wdArtTwistedLines2	  =124
Const wdArtMoons			  =125
Const wdArtOvals			  =126
Const wdArtDoubleDiamonds	 =127
Const wdArtChainLink		  =128
Const wdArtTriangles		  =129
Const wdArtTribal1			 =130
Const wdArtMarqueeToothed	 =131
Const wdArtSharksTeeth		 =132
Const wdArtSawtooth			=133
Const wdArtSawtoothGray		=134
Const wdArtPostageStamp		=135
Const wdArtWeavingStrips	  =136
Const wdArtZigZag			 =137
Const wdArtCrossStitch		 =138
Const wdArtGems				=139
Const wdArtCirclesRectangles  =140
Const wdArtCornerTriangles	 =141
Const wdArtCreaturesInsects	=142
Const wdArtZigZagStitch		=143
Const wdArtCheckered		  =144
Const wdArtCheckedBarBlack	 =145
Const wdArtMarquee			 =146
Const wdArtBasicWhiteDots	 =147
Const wdArtBasicWideMidline	=148
Const wdArtBasicWideOutline	=149
Const wdArtBasicWideInline	 =150
Const wdArtBasicThinLines	 =151
Const wdArtBasicWhiteDashes	=152
Const wdArtBasicWhiteSquares  =153
Const wdArtBasicBlackSquares  =154
Const wdArtBasicBlackDashes	=155
Const wdArtBasicBlackDots	 =156
Const wdArtStarsTop			=157
Const wdArtCertificateBanner  =158
Const wdArtHandmade1		  =159
Const wdArtHandmade2		  =160
Const wdArtTornPaper		  =161
Const wdArtTornPaperBlack	 =162
Const wdArtCouponCutoutDashes =163
Const wdArtCouponCutoutDots	=164

Const wdBorderDistanceFromText	  =0
Const wdBorderDistanceFromPageEdge  =1

Const wdOrientPortrait	  =0
Const wdOrientLandscape	 =1
Const wdReplaceNone		 =0
Const wdReplaceOne		 =1
Const wdReplaceAll		 =2

Const wdFontBiasDontCare	=255
Const wdFontBiasDefault	 =0
Const wdFontBiasFareast	 =1

'* WdGoToItem
Const wdGoToBookmark			 =-1
Const wdGoToSection			 =0
Const wdGoToPage				 =1
Const wdGoToTable				=2
Const wdGoToLine				 =3
Const wdGoToFootnote			 =4
Const wdGoToEndnote			 =5
Const wdGoToComment			 =6
Const wdGoToField				=7
Const wdGoToGraphic			 =8
Const wdGoToObject			  =9
Const wdGoToEquation			 =10
Const wdGoToHeading			 =11
Const wdGoToPercent			 =12
Const wdGoToSpellingError		=13
Const wdGoToGrammaticalError	 =14
Const wdGoToProofreadingError	=15

'* WdGoToDirection
Const wdGoToFirst		  =1
Const wdGoToLast			=-1
Const wdGoToNext			=2
Const wdGoToRelative		=2
Const wdGoToPrevious		=3
Const wdGoToAbsolute		=1
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#5
именование таблиц в МСО ворд появилось только с 2010 (ЕМНИП) и формат (возможно) д.б. docx<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"в доки приложены только таблицы в формате ворды"</div></div><div class="sp-body"><div class="sp-content">
Код:
Function ReplaceTablesName(NDC As NotesDocumentCollection, worddoc As Variant) As Boolean
On Error Goto ErrH
Dim tblsList List As String
Dim fname As String, doc As NotesDocument
Set doc=NDC.GetFirstDocument
Dim i As Integer
'перебираем документы таблиц, выгружаем файлы, заполняем список
Do While Not doc Is Nothing
Dim fList List As String
Erase fList
fname=DetachDocFiles(doc, {}, fList)
'		Print doc.UniversalID
If Len(fname)>0 Then
tblsList(Ucase(doc.GetItemValue(NAME_FIELD)(0)))=fname
'			Print {table name:} &doc.GetItemValue(NAME_FIELD)(0)
i=i+1
End If
Set doc=NDC.GetNextDocument(doc)
Loop
If i<1 Then Print {table files doesn't exist}:Exit Function 'не трогать таблицы - если нет файлов
i=0
Dim rngS
'ищем заголовки в таблицах
Dim tblsObjList List As Variant
Print {Tables Count:} &Cstr(worddoc.Tables.Count)
Forall tbl In worddoc.Tables
Dim s As String
s={}
On Error Resume Next
s=Ucase(tbl.Title)
On Error Goto ErrH
If Len(s)>0 Then
Set tblsObjList(s)=tbl
Print {Search table for replace:} &s
If Iselement(tblsList(s)) Then
fname=tblsList(s)
If Len(fname)>0 Then
rngS = tbl.Range.Start
tbl.Delete
Call worddoc.Range(rngS, rngS).InsertFile(fname,,False)
Print {replaced:} &s
i=i+1
End If
End If
End If	
End Forall
If i>0 Then Print {Tables with title exist}:Exit Function
'алгоритм для замены в старом формате Word (не было tbl.Title)
Dim tbls() As String
Print {tables w/o titles}
Redim Preserve tbls(i) As String 'чтобы не обрабатывать исключение в цикле
'формируем массив из списка (для старого способ обработки)
Forall m In tblsList
Redim Preserve tbls(i) As String
tbls(i)=m
i=i+1
End Forall
i=0
Forall tbl In worddoc.Tables
fname={}
If Not i>Ubound(tbls) Then
If Len(tbls(i)) >0 Then fname=tbls(i)
If Len(fname)>0 Then
rngS = tbl.Range.Start
tbl.Delete
Call worddoc.Range(rngS, rngS).InsertFile(fname,,False)
End If
End If
i=i+1
End Forall
ReplaceTablesName=True
Quit:
Exit Function
ErrH:
RaiseError
Resume Quit
End Function
Добавлено: код работает и со старым форматом, но тогда заменяет таблицы по порядку следования
и таки, да - проще удалить таблицу и вставить нужную
а ваще есть
Для просмотра контента необходимо: Войти или зарегистрироваться

там иной подход к формированию шаблонов - более интересный и гибкий, чем тупая подстановка таблиц
формируется некий шаблонизатор и оператору ставится макрос, кот. он может подставлять нужные "поля"
 

Eugen

Well-known member
22.03.2012
177
0
#6
а если пойти другим путём?? заполнять таблицу в экселе))) а потом копипастить в то место где стоит (куда указывает) поле?
Думал над этим вариантом, но отложил на потом, если не получится все сделать средствами ворда.

susinmn сказал(а):
Set DrawTable = ActiveDocument.Tables(n)
для того чтобы это сделать, нужно знать индекс таблицы, а как раз его то я и пытаюсь определить

swyatogor сказал(а):
Для позиционирования в документе ворда обычно применяют закладки.. при работе с таким доком - позиционируют курсор на нужную закладку (причем не обязательно по порядку их следования в доке), стирают её и вместо неё помещают то, что необходимо..
так я вроде так и делаю...
Код:
If wDoc.FormFields(i).Name = "tableAnchor" Then
res = True
End If
Только зачем заморачиваться с курсором, если можно взять range закладки и передать его в параметры создания таблицы? Новая таблица просто заменит это поле.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#7
Eugen еще раз повторю - у таблицы можно задать имя, если только не используете "окаменевший кал мамонта" в кач-ве МСО, код выше
и если говорить по эхель - то тогда вообще отказаться от МСО и использовать POI (ссылка выше), получим динамику, кот будет подхватываться прям из кода/файла-конфигурации (последнее - xml или плэйнтекст типа property)
при этом получим свой docx, кот. будет адекватно воспроизводиться в МСО