Перейти к содержимому

Paulitto

Регистрация: 14 апр 2009
Offline Активность: 22 окт 2012 06:36
-----

#77775 Полезные процедуры и функции

Написано Paulitto 04 сентября 2010 - 15:01

Для TestComplete есть много готовых примеров работы с excel, но когда мне понадобилось нечто подобное для таблиц OpenOffice, оказалось сложно что либо найти.

Вот пример функции как записать данные в таблицу OpenOffice (JScript):

/*******************************************************************
Arr - массив массивов                                              *
Filename - полный путь к файлу, если такого нет, то он создается   *
********************************************************************/

function SaveArrayToCalc(Arr, FileName)
{
 try
 { 
  //создаем обьект Desktop через который и происходит работа с OpemOffice 
  var oServiceManager = Sys.OleObject("com.sun.star.ServiceManager");
  var oDesktop        = oServiceManager.createInstance("com.sun.star.frame.Desktop");
  
  // добавляем hidden == true в массив параметров открытия документа (чтоб OpenOffice документ не был виден на экране) 
  var VariantArray    = new Array();
  var Mystruct =  oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
  Mystruct.Name = "Hidden";
  Mystruct.Value = true;
  VariantArray[0] = Mystruct;
  
  //создаем документ, (чтобы открыть уже существующий документ, в кач первого параметра необходимо передать путь к нему в виде url)  
  var oDoc            = oDesktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, VariantArray);
  //получаем первый лист таблицы
  var oSheet          = oDoc["getSheets"]().getByIndex(0); 
	
  //заполняем первый лист массивом массивов
  for (var j=0; j<Arr.length; j++)
  for(var i=0; i<Arr[j].length; i++)
     oSheet.getCellByPosition(i, j).setString(Arr[j][i]);
  
 //сохраняем документ, путь также в виде url
  oDoc.storeAsURL("file:///"+aqString.Replace(FileName, "\\", "/"), VariantArray);
 //закрытие документа 
  oDoc.Close(false);
 }
 catch(exception)
  {
    Log.Warning("Unable to save the data to ods table", exception.description);
  }

}
Массив массивов вместо двумерного выбрал потому что может иметь разную длину строк, хотя это уже можно поменять как кому нравится.

Читать данные с таблицы можно аналогичным образом передавая в функции LoadComponentFromURL путь к документу в url формате и используя getString вместо setString.
  • 1