示例#1
0
void WordLine(Word_xp::TWordDocument* WD,Word_xp::TWordFont* WF, UnicodeString Line, AnsiString Font,
int height, int bold, int italic, int underline, int shadow,
TColor Color = (TColor)RGB(0,0,0), Word_xp::WdParagraphAlignment Position = WdParagraphAlignment::wdAlignParagraphLeft)
{
	WD->GetDefaultInterface()->Paragraphs->get_Last()->set_Alignment(Position);
	WD->Range(EmptyParam(),EmptyParam())->InsertAfter(StringToOleStr(Line));
	WF->ConnectTo(WD->Sentences->get_Last()->get_Font());
	WF->GetDefaultInterface()->Size = height;
	WF->GetDefaultInterface()->Shadow = shadow;
	WF->GetDefaultInterface()->Bold = bold;
	WF->GetDefaultInterface()->Italic = italic;
	WF->GetDefaultInterface()->Underline = (Word_xp::WdUnderline)underline;
	WF->GetDefaultInterface()->Color = (Word_xp::WdColor)Color;
	WF->set_Name(StringToOleStr(Font));
}
//---------------------------------------------------------------------------
void __fastcall TDPAniver1::PreencheArquivo( AnsiString arquivoNovo, AnsiString arquivoModelo)
{
  int Grupo;
  int Secao = 1;
  try
   {
    DSEmp = new PHDataSource( NULL );
    DSEmp->Name = "DSEmpresa";
    DSEmp->Tabela = DM->TBEmpresas;
    DSEmp->Open( true );

    // Carrega no datasource os dados da empresa que esta sendo acessada
    if(!DSEmp->BuscaKeyBD( "Codigo", IntToStr( vg.EmpresaAtual ), true, true ))
      throw Exception( "Não foi possível carregar dados da empresa acessada." );

    FiltraAniversariantes();

    Evolucao1->StartProcess( DSAniver2->CountReg() * 8 );
    // Percorre todos os aniversariantes da lista
    while(!DSAniver2->Eof)
     {
      if((int)DSAniver2->GV( ANIVER_GERARCARTAO ))
       {
        Grupo = 1;
        Evolucao1->Label1->Caption = "Aniversariante: " + DSAniver2->GT( ANIVER_SOCIO );
        while(Grupo < 5)
         {
          Evolucao1->ProcessAdd();
          SubstituiPadroesDoDocumento(Grupo, Secao);
          Grupo++;
          Evolucao1->ProcessAdd();
          if(Evolucao1->Interrompe())
           break;
         }
        DSAniver2->Next();
        if(!DSAniver2->Eof)
         {
          Secao++;
          WDoc->Sections->Add( EmptyParam, (OleVariant) wdSectionNewPage );
          WDoc->ActiveWindow->Selection->GoToNext( wdGoToPage );
          WDoc->ActiveWindow->Selection->InsertFile( StringToOleStr( arquivoModelo ),
                                                    EmptyParam, (OleVariant) false,
                                                    (OleVariant) false, EmptyParam );
         }
        if(Evolucao1->Interrompe())
          break;
       }
      else
       {
        DSAniver2->Next();
       }
     }
   }
  __finally
   {
    DSAniver2->Close();
    DSEmp->Close();
    delete DSEmp;
   }
}
//---------------------------------------------------------------------------
void __fastcall TDPAniver1::ConectaWordServer( AnsiString arquivo)
{
  try
   {
    WDoc->Connect();
   }
  catch(Exception & E)
   {
    throw Exception( "Não foi possível conectar com Word.\r\n\r\n" + E.Message + "\r\n" );
   }
  WApp->Options->CheckSpellingAsYouType = False;
  WApp->Options->CheckGrammarAsYouType = False;
  WApp->Caption = StringToOleStr( Caption );
  OleVariant Template = EmptyParam;
  OleVariant NewTemplate = False;
  OleVariant ItemIndex = 1;
  if(!FileExists( arquivo ))
   {
    WApp->Documents->Add( Template, NewTemplate );
    WDoc->ConnectTo( WApp->Documents->Item( ItemIndex ) );
   }
  else
   {
    WDoc->ConnectTo( WApp->Documents->Open( (OleVariant) arquivo ) );
    OleVariant Final = (OleVariant) (int)WDoc->Characters->Count;
   }
}
//---------------------------------------------------------------------------
void OfficeFillCell(AnsiString Office, Variant Document,int table,int string,int row, AnsiString str)
{
// Записать строку STR в ячейку номер (String, Row) таблицы номер Table
// для ОО нумерация table, string, row - c нуля
// для ОО нумерация table, string, row - c единицы
  try
    {
     if (Office=="OO")
      {
       Variant vTables, vTable, vCell;;
       vTables = Document.OleFunction("getTextTables"); // список таблиц
       vTable = vTables.OleFunction("getByIndex", table-1);  // таблица по номеру
       vCell = vTable.OleFunction("getCellByPosition", row-1, string-1); // ячейка по номеру
       vCell.OleFunction("setString", str);
      }
     if (Office=="MSO")
      {
       Variant word_rang, vTables, vTable, vCell;;
       word_rang=Document.OleFunction("Range");
       vTables=word_rang.OlePropertyGet("Tables");
       vTable=vTables.OleFunction("Item",(Variant)(table));
       vCell=vTable.OleFunction("Cell", string, row);
       vCell.OlePropertyGet("Range").OlePropertySet("Text",StringToOleStr(str));
      }
     }
  catch (Exception &E)
    {
     ShowMessage("Ошибка при записи в таблицу " + E.Message);
    }
}
示例#5
0
void doc2txt::convertPro(AnsiString WordFile,AnsiString PathPutTxt)
{
	TStringList* word=new TStringList;
	String filename = WordFile;
	Variant  vVarApp,vVarDoc,vVarParagraphs,vVarParagraph;
	AnsiString resolution = ExtractFileExt(filename);
	AnsiString str = StringReplace( ExtractFileName(filename),resolution,"",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase);

	try
	{
		vVarApp=CreateOleObject("Word.Application");
	}
	catch(...)
	{
		MessageBox(0, "Не удачно получилось открыть Word", "Внимание", MB_OK);
		return;
	}

	vVarApp.OlePropertySet("Visible",false);
	vVarDoc = vVarApp.OlePropertyGet("Documents");
	vVarDoc.OleProcedure("Open", StringToOleStr(filename));
	vVarDoc = vVarDoc.OleFunction("Item",1);
	vVarDoc.OleProcedure("Activate");
	String s = vVarDoc.OlePropertyGet("Content").OlePropertyGet("Text");
	word->Add(s);
	word->SaveToFile( PathPutTxt + str +".txt" );
	vVarApp.OleProcedure("Quit");
	delete word;
}
//---------------------------------------------------------------------------
void __fastcall TCPRecib1::SpeedButton22Click( TObject*  Sender )
{
  if( !PHDS1->CountReg() )
   {
    throw Exception( "Nenhum Contrato." );
   }
  PHDS1->Edit();//Sinaliza que o arquivo do word está em edição
  try
   {
    W1->Connect();
    W1->Caption = StringToOleStr( "GEPH - Gerenciador de Escritórios (RECIBOS): " + String( PHDS1->GV( RECIB_DESCRICAO ) ) );
    W1->Visible = true;

    AnsiString Arq = String( PHDS1->GV( RECIB_ARQUIVO ) );
    int Tam = -1;
    int H = FileOpen( Arq, fmOpenRead | fmShareDenyNone );
    if( H != -1 )
     {
      if( FileSeek( H, 0, 2 ) == 0 )
       {
        Tam = 0;
       }

      FileClose( H );
     }

    if( !FileExists( Arq ) || Tam == 0 )  // novo ou zerado
     {
      OleVariant Template = EmptyParam;
      OleVariant NewTemplate = false;
      OleVariant DocType = EmptyParam;
      OleVariant ItemIndex = 1;
      W1->Documents->Add( Template, NewTemplate, DocType );
      WordDocument1->ConnectTo( W1->Documents->Item( ItemIndex ) );
      WordDocument1->SaveAs( ( OleVariant ) Arq );
     }
    else
     {
      WordDocument1->ConnectTo( W1->Documents->Open( (OleVariant) Arq ) );
     }

    WordDocument1->Activate();
    W1->Activate();
   }
  catch( Exception & exception )
   {
    W1->Disconnect();
    Application->ShowException( &exception );
   }
}
示例#7
0
void DrawRough()
{
	long lStyle;
	IRoughsPtr v7RoughsCollect;
	IRoughPtr v7Rough;
	IRoughParamsPtr v7RoughsParam;
	ITextPtr v7RoughText;
	ksRoughParam *pRoughParam;	//V5

//признак "по контуру"
	stRoughnessParam.bPoKonturu = (Form4->Panel7->BevelOuter == bvLowered);
//тип шероховатости
	if (Form4->Panel1->BevelOuter == bvLowered) stRoughnessParam.cType = 0;
	if (Form4->Panel2->BevelOuter == bvLowered) stRoughnessParam.cType = 1;
	if (Form4->Panel3->BevelOuter == bvLowered) stRoughnessParam.cType = 2;
//текст
	if (Form4->ListBox1->ItemIndex > -1) stRoughnessParam.cText = Form4->ListBox1->Items->operator [](Form4->ListBox1->ItemIndex);
//cтрелка, если есть и тип её
	if (stRoughnessParam.dDistance == 0)
	{
	//полки нет
		stRoughnessParam.cPolka = 0;
	} else
	{
	//полка есть
		if (stRoughnessParam.pObj) lStyle = pDocV5->ksGetObjectStyle(stRoughnessParam.pObj->Reference); else lStyle = -1;
		if (lStyle != 1) stRoughnessParam.cPolka = 1; else  stRoughnessParam.cPolka = 2;
	};
	if (Form4->Panel5->BevelOuter == bvLowered) stRoughnessParam.cPolka = 1;
	if (Form4->Panel6->BevelOuter == bvLowered) stRoughnessParam.cPolka = 2;

//создание шероховатости
	v7RoughsCollect = stRoughnessParam.pSymCont->Roughs;
	v7Rough = v7RoughsCollect->Add();
	v7RoughsParam = v7Rough;
	v7RoughText = v7RoughsParam->RoughParamText;
	v7RoughText->set_Str(StringToOleStr(stRoughnessParam.cText));
	v7RoughsParam->SignType = (ksRoughSignEnum)stRoughnessParam.cType;
	v7RoughsParam->ProcessingByContour = stRoughnessParam.bPoKonturu;
	v7Rough->BaseObject = stRoughnessParam.pObj;
	v7Rough->X0 = stRoughnessParam.X0;
	v7Rough->Y0 = stRoughnessParam.Y0;

	//дополнительная выносная линия (если нужна)
	DrawAnotherCurve();
	if (stRoughnessParam.pLineParam || stRoughnessParam.pArcParam)
		if (stRoughnessParam.cPolka == 2) stRoughnessParam.cPolka = 1;  //если есть стрелка то убирает её на выноске
	if (stRoughnessParam.cPolka)
	{
		//разворот полки
		if (stRoughnessParam.X1 > stRoughnessParam.X0) v7RoughsParam->ShelfDirection = ksShelfDirectionEnum::ksLSRight;
			else v7RoughsParam->ShelfDirection = ksShelfDirectionEnum::ksLSLeft	; //полка либо влево, либо вправо
		//разворот ножки полки
		//тип указателя ножки
		if (stRoughnessParam.cPolka == 1) v7RoughsParam->ArrowType = ksArrowEnum::ksLeaderWithoutArrow; else v7RoughsParam->ArrowType = ksArrowEnum::ksArrow;
		//длина ножки
		v7RoughsParam->LeaderLength = stRoughnessParam.dDistance * GetCurrentViewScale();
		v7RoughsParam->LeaderAngle =  stRoughnessParam.dAngNEW;
		v7Rough->_Update();
	} else
	{
		//Привязка к объекту не требуется так как мы вручную устанавливаем угол
		v7Rough->_Update();
		pRoughParam = (ksRoughParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_RoughParam);
		pDocV5->ksGetObjParam(v7Rough->Reference, pRoughParam, 16);
		((ksRoughPar*)pRoughParam->GetrPar())->ang = stRoughnessParam.dAngNEW;
		pDocV5->ksSetObjParam(v7Rough->Reference, pRoughParam, 16);
	}
}
示例#8
0
bool ViborRoughness()
{
	//Подгрузка функции GetCurrentViewScale
	GetCurrentViewScale = (float(*)())GetProcAddress(LoadLibrary(L"KAPI2D5.dll"), "?GetCurrentViewScale@@YAMXZ");

	//Получение базовой шероховатости
	long lBaseRough = pDocV5->ksCreateViewObject(16);
	if (!lBaseRough) return false;
	//получение угла из версии 5
	ksRoughParam *pRoughParam = (ksRoughParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_RoughParam);
	pDocV5->ksGetObjParam(lBaseRough, pRoughParam, 16);
	stRoughnessParam.dAng = ((ksRoughPar*)pRoughParam->GetrPar())->ang;
	//Взятие базового объекта
	IRoughPtr v7Rough = pKompas5->TransferReference(lBaseRough, 0);
	stRoughnessParam.pObj = v7Rough->BaseObject;
	stRoughnessParam.X0 = v7Rough->X0;
	stRoughnessParam.Y0 = v7Rough->Y0;
	//pDocV5->ksLightObj(stRoughnessParam.pObj->Reference, 1);

//Разбиение шероховатости и просмотр "есть ли линия(дуга)-вытяжка"
	ksLineSegParam *TempLineParam;
	long TempRGroup = pDocV5->ksDecomposeObj(lBaseRough, 2, 1, 0);
	long lObj, lTypeObj, lLineSmall, lLineBig;
	long lDistance;
	bool b0, b1, b2, b3;
	ksIterator *pIter = (ksIterator*)pKompas5->GetIterator();

	if (pIter->ksCreateIterator(0, TempRGroup))
	{
	//Так как известны координаты базовой точки, то ищем линию которым принадлежит эта точка (НЕ НА КОНЦАХ)
		if ( pDocV5->ksExistObj(lObj = pIter->ksMoveIterator(StringToOleStr(UnicodeString("F")))) )
		do
		{
			lTypeObj = pDocV5->ksGetObjParam(lObj, 0, 0);
			if (lTypeObj == LINESEG_OBJ)
			{
				//Получение параметров линии
				TempLineParam = (ksLineSegParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_LineSegParam);
				pDocV5->ksGetObjParam(lObj, TempLineParam, lTypeObj);
				//true если попадет на крайнюю точку линии      Проверка что точка не конечная (потому как это не будет искомая линия)
					     //double iii = stRoughnessParam.X0 - TempLineParam->x2;
					     //double yyy = stRoughnessParam.Y0 - TempLineParam->y2;
				b0 =((fabs(stRoughnessParam.X0 - TempLineParam->x1) < 0.001) && (fabs(stRoughnessParam.Y0 - TempLineParam->y1) < 0.001)) ||
				    ((fabs(stRoughnessParam.X0 - TempLineParam->x2) < 0.001) && (fabs(stRoughnessParam.Y0 - TempLineParam->y2) < 0.001));
				//По уравнению прямой смотрим принадлежность точки линии
				b1 = fabs((stRoughnessParam.X0 - TempLineParam->x1)*(TempLineParam->y2 - TempLineParam->y1)
					  -
					  (stRoughnessParam.Y0 - TempLineParam->y1)*(TempLineParam->x2 - TempLineParam->x1))
				    < 0.001;
				//true для случая когда линии вертикальны или горизонтальны
				b2 = fabs(TempLineParam->x1 - TempLineParam->x2) < 0.001;
				b3 = fabs(TempLineParam->y1 - TempLineParam->y2) < 0.001;
				if (!b0)
				{
					if (!b2 && !b3 && b1) stRoughnessParam.pLineParam = TempLineParam;
					if (b3)
						if (((TempLineParam->x1 < stRoughnessParam.X0) && (stRoughnessParam.X0 < TempLineParam->x2)) ||
						   ((TempLineParam->x2 < stRoughnessParam.X0) && (stRoughnessParam.X0 < TempLineParam->x1))) stRoughnessParam.pLineParam = TempLineParam;
					if (b2)
						if (((TempLineParam->y1 < stRoughnessParam.Y0) && (stRoughnessParam.Y0 < TempLineParam->y2)) ||
						   ((TempLineParam->y2 < stRoughnessParam.Y0) && (stRoughnessParam.Y0 < TempLineParam->y1))) stRoughnessParam.pLineParam = TempLineParam;
				}

			}
			if (lTypeObj == ARC_OBJ)
			{
				//Так как дуга может быть только одна и только в вытяжке, то параметры не проверяются
				stRoughnessParam.pArcParam = (ksArcByPointParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_ArcByPointParam);
				pDocV5->ksGetObjParam(lObj, stRoughnessParam.pArcParam, lTypeObj);
			}
		} while( pDocV5->ksExistObj(lObj = pIter->ksMoveIterator(StringToOleStr(UnicodeString("N")))) );
	}
	pIter->ksDeleteIterator();
	pDocV5->ksClearGroup(TempRGroup, true);
//////////
	//Удаление базовой шероховатости
	pDocV5->ksDeleteObj(lBaseRough);

	//Отключение привязок (чтобы не видеть перекрестье привязок)
	ksSnapOptions *pOpt = (ksSnapOptions *)pKompas5->GetParamStruct(86);    //ko_SnapOptions
	pKompas5->ksGetSysOptions(SNAP_OPTIONS, pOpt);
	pOpt->commonOpt = pOpt->commonOpt | 8;
	pKompas5->ksSetSysOptions(SNAP_OPTIONS, pOpt);

	//Построение фантома
	double x,y;
	ksRequestInfo *pRInfo = (ksRequestInfo *)pKompas5->GetParamStruct(10);	//ko_RequestInfo
	ksPhantom *pPhan = (ksPhantom *)pKompas5->GetParamStruct(6);		//ko_Phantom
	ksType6 *pType6;

	//настройка фантома
	pPhan->Init();
	pPhan->phantom = 6;
	pType6 = (ksType6 *) pPhan->GetPhantomParam();
	pType6->gr = 0;
	pRInfo->Init();
	pRInfo->prompt = StringToOleStr((UnicodeString)L"Выберите вторую точку выноски");
	pRInfo->dynamic = 1;
	pRInfo->SetCallBackC(StringToOleStr((UnicodeString)L"CALLD"), (long)HInstance, NULL);

	x = 0; y = 0;
	bEsc4 = true;
	if (pDocV5->ksCursor(pRInfo, &x, &y, pPhan) != 0)
	{
		//Включение привязок
		pOpt->commonOpt = pOpt->commonOpt ^ 8;
		pKompas5->ksSetSysOptions(SNAP_OPTIONS, pOpt);
		return false;
	}

	//Включение привязок
	pOpt->commonOpt = pOpt->commonOpt ^ 8;
	pKompas5->ksSetSysOptions(SNAP_OPTIONS, pOpt);

	if (bEsc4) return false;
	return true;
}
示例#9
0
void __fastcall TRefEditForm::Button3Click(TObject *Sender)
{
  wchar_t	*doc_contents;
  wchar_t	*ref_contents;
  wchar_t	*ref_codes;
  RangePtr	my_range;

  AnsiString fileName;
  AnsiString refNo;

  ListBox1->Items->Clear();

  for(int k=0;k<ListBox_Words->Items->Count;k++)
     { fileName=(AnsiString)ListBox_Words->Items->Strings[k];
       //-- We've got a file name - Open the document
       WordDocument1->ConnectTo(WordApplication1->Documents->Open((OleVariant)fileName));

       ParagraphsPtr doc_pars;
                     doc_pars=WordDocument1->Paragraphs;
       long doc_pars_cnt=doc_pars->Count;

       Paragraph* doc_par;
       RangePtr par_range;
       wchar_t* par_contents;

       Words* par_words;
       RangePtr word_range;
       wchar_t* word_contents;

       for(long k=0;k<doc_pars_cnt;k++)
          {  doc_par=doc_pars->Item(k+1);
             par_range=doc_par->get_Range();
             par_words=par_range->get_Words();
             int par_word_cnt;
                 par_word_cnt=par_words->get_Count();
/**/
             unsigned int ref_open=0;
             unsigned int brk_open=0;
             wchar_t* refs_bracked[25];
             long refs_ind[25];
             int refs_cnt=0;

             RangePtr brackets_beg_range;
             RangePtr brackets_end_range;
/**/
             for(int j=par_word_cnt;j>0;j--)
                { word_range=par_words->Item(j);
                  word_contents=word_range->get_Text();

                  if(word_contents[0]=='#' || word_contents[1]=='#')
                    {
                     if(word_contents[0]=='#')
                     {my_range=WordDocument1->Range((Variant)word_range->Start,(Variant)(word_range->Start+4));
                      if(!brk_open)
                        {brackets_end_range=WordDocument1->Range((Variant)word_range->Start,(Variant)(word_range->Start+4));
                         brk_open=1;
                        }

                     }
                     if(word_contents[1]=='#')
                     {my_range=WordDocument1->Range((Variant)(word_range->Start+1),(Variant)(word_range->Start+5));
                      ref_open=1;
                      if(!brk_open)
                        {brackets_end_range=WordDocument1->Range((Variant)word_range->Start+1,(Variant)(word_range->Start+5));
                         brk_open=1;
                        }
                      brk_open=0;
                     }
/**/
                     refs_bracked[refs_cnt]=my_range->get_Text();
                     refs_cnt++;

                     if(ref_open)
                     {
                         for(int i=0;i<refs_cnt;i++)
                            {
                             refs_ind[i]=RefCode2RefNo(refs_bracked[i]);
                            }
                         for(int j=0;j<refs_cnt;j++)
                            for(int k=0;k<refs_cnt;k++)
                            {if(refs_ind[j]<refs_ind[k])
                               {long tmp=refs_ind[j];
                                refs_ind[j]=refs_ind[k];
                                refs_ind[k]=tmp;
                               }
                            }
                         AnsiString a;
                         AnsiString b;
                         for(int i=0;i<refs_cnt-1;i++)
                            {b=IntToStr(refs_ind[i]);
                             b+=", ";
                             a+=b;
                            }
                         b=IntToStr(refs_ind[refs_cnt-1]);
                         a+=b;
//my_range=WordDocument1->Range((Variant)(word_range->Start+1),(Variant)(word_range->Start+refs_cnt*6-1));
my_range=WordDocument1->Range((Variant)(word_range->Start+1),(Variant)(brackets_end_range->Start+4));
my_range->set_Text(StringToOleStr(a));
                         refs_cnt=0;
                         ref_open=0;
                     }
                    }
                }
           }
     WordDocument1->Save();
     WordDocument1->Close();
     WordDocument1->Disconnect();
     ListBox1->Items->Add(fileName+" proceed");
    }
}
示例#10
0
//---------------------------------------------------------------------------
void __fastcall TRefEditForm::Button2Click(TObject *Sender)
{RangePtr tmp_range;
 AnsiString str;
 WordDocument2->ConnectTo(WordApplication1->Documents->Add());
 tmp_range=WordDocument2->get_Content();
 int cnt=ListBox1->Count;
 for(int i=0;i<cnt;i++)
 {str=(AnsiString)ListBox1->Items->Strings[i];
  tmp_range->InsertAfter(StringToOleStr(str));
 }
 tmp_range->InsertAfter(StringToOleStr("\nÑÏÈÑÎÊ ÂÈÊÎÐÈÑÒÀÍÈÕ ÄÆÅÐÅË\n"));
 //-----
// wchar_t	*doc_contents;
 wchar_t	*ref_contents;
// RangePtr	my_range;
 OleVariant	FileName;
 FileName = ref_fileName;
 WordDocument1->ConnectTo(WordApplication1->Documents->Open(FileName));
 //-----
    TablesPtr doc_tables;
              doc_tables=WordDocument1->Tables;
    Table* ref_table;
           ref_table=doc_tables->Item(1);
    Columns* ref_table_columns;
             ref_table_columns=ref_table->get_Columns();
 //   Column* code_column;
 //           code_column=ref_table_columns->get_First();
 //   Cells* code_cells;
 //          code_cells=code_column->Cells;
 //   Cell* code_cell;
 //   RangePtr  code_range;

    Column* ref_column;
            ref_column=ref_table_columns->get_Last();
    Cells* ref_cells;
           ref_cells=ref_column->Cells;
    Cell* ref_cell;
    RangePtr  ref_range;
    long k=0;
    for(long j=0;j<ref_count;j++)
       {if(arr[j].used)
        {ref_cell=ref_cells->Item(j+1);
         ref_range=ref_cell->get_Range();
         ref_contents =ref_range->get_Text();
         tmp_range->InsertAfter(StringToOleStr(arr[j].RefCode));
         tmp_range->InsertAfter(StringToOleStr("\t"));
         k++;
         tmp_range->InsertAfter(StringToOleStr(IntToStr(k)));
         tmp_range->InsertAfter(StringToOleStr("\t"));
         tmp_range->InsertAfter(StringToOleStr(ref_contents));
        }
       }

 tmp_range->InsertAfter(StringToOleStr("\nÑÏÈÑÎÊ ÍÅÂÈÊÎÐÈÑÒÀÍÈÕ ÄÆÅÐÅË\n"));
    for(long j=0;j<ref_count;j++)
       {if(arr[j].used==0)
        {ref_cell=ref_cells->Item(j+1);
         ref_range=ref_cell->get_Range();
         ref_contents =ref_range->get_Text();
         tmp_range->InsertAfter(StringToOleStr(arr[j].RefCode));
         tmp_range->InsertAfter(StringToOleStr("\t"));
         k++;
         tmp_range->InsertAfter(StringToOleStr(IntToStr(k)));
         tmp_range->InsertAfter(StringToOleStr("\t"));
         tmp_range->InsertAfter(StringToOleStr(ref_contents));
        }
       }
 WordDocument1->Close();
 WordDocument1->Disconnect();
 WordDocument2->Save();
 WordDocument2->Close();
 WordDocument2->Disconnect();

}