-Музыка

 -Видео

 -неизвестно

 -Поиск по дневнику

Поиск сообщений в Бляндер

 -Подписка по e-mail

 

 -Постоянные читатели

 -Сообщества

Читатель сообществ (Всего в списке: 1) Windows

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 31.05.2004
Записей:
Комментариев:
Написано: 138





Свадьба Трушиных...

Воскресенье, 27 Июля 2008 г. 20:59 + в цитатник
Хм... странное дело свадьба... Вроде и праздник, а все пронизано грустным - напряженным настроением...
Не знаю зачем люди это делает, но судя по всему это происходит когда им просто хочется праздника... Одновременно большого и разграничивающего жизнь до и после...
В общем я не понимаю зачем это нужно кому это нужно и какой от этого прок? Наверное - это способ эмоциональной разрядки...
Не нужна она... Институт брака давно уже пора официально упразднить...!!!


Понравилось: 6 пользователям

Кандидатский экзамен. Английский язык.

Воскресенье, 18 Мая 2008 г. 10:45 + в цитатник
Мне в скором времени предстоит сдавать кандидатский минимум в аспирантуре по английскому языку В качестве одного из требований естественно - оформление письменного перевода и словника (словаря-минимума) технических терминов по своей тематике, не менее 500 слов.
Поиски в интернете готового словника не увенчался успехом, посему выкладываю на общее пользование результат моих трехдневных мучений.
Итак, берите, пользуйте, сдавайте... я это делал сам, листая Lingvo

Вложение: 3675179_Pismennuyy_perevod.doc


Метки:  

Алгоритм Голдберга-Рао поиска максимального потока в графе

Воскресенье, 17 Февраля 2008 г. 19:40 + в цитатник
Долго искал в интернете, к сожалению ничего по этой теме не нашел, хотя это самый современный алгоритм для поиска максимального потока. Пришлось переводить с оригинала, то есть с лекционных записей Голдберга. Перевод довольно-таки качественный. Пожалуйста, пользуйтесь, кому надо.

Вложение: 3655338_GoldbergRao.doc

Рубрики:  Програмирование
Математика

Метки:  

UDF в InterBase 5.x

Воскресенье, 17 Февраля 2008 г. 13:50 + в цитатник

Хотел бы изложить здесь проблему, с которой столкнулись совсем недавно. Так-то у нас большинство проектов на FireBird 2.03, но тут вдруг возникла необходимость написать под InterBase 5.x. Делаем UDF, подключаем, получаем ошибку "Invalid request to blr offset at ..." в общем-то стандартная ошибка, когда бибилотека лежит не там, например для FireBird должна лежать в папке UDF, а для InterBase 5.x - в папке bin, или точка вызова не совпадает. Все перебрали, все правильно, но тем не менее не работает.

Оказывает такое еще может быть когда регистр точек вызова не совпадает, вот оно что. Т.е. даже ключевое слово name - четкого указания как называется точка вызова не дает. Исправиви в БД наимнования точек вызова в соответствии с регистром, как процедуры и функции называются непосредственно в коде библиотеки, избавились от проблемы.

Вот такое вот еще одно решение данной проблемы.

Рубрики:  Програмирование

Метки:  

Вчера отмечали Серегин ДР

Суббота, 26 Января 2008 г. 09:58 + в цитатник

Позитивно очень посидели, випили немного, покушали вкусненько, пообщелись. Все в работе, никого не вытащишь, все занятые, а тут вдруг все собрались... Потом все пошли в баню... Я не пошел... устал очень, да и баню не люблю... А они, говорят, барагозили до 4-х утра.

Замечательно в общем... Мне все понравилось, только уставшие мы все, замучанные, заезженные. Почаще бы так собираться!!!

А я умудрился домой приехать в 22:45, короче всего за 45 мин по таким вот сугробам добрался. Пришел, залез в ванную, получил почту, проверил доклад и лег спать. Кстати, был Смех без правил вчера... Очень даже ничего... Хорошие ребята попались...


Метки:  

Не умеет она готовить

Пятница, 18 Января 2008 г. 15:07 + в цитатник
Сегодня общался с одной дамой по аське. Удивительно, до этого она говорила, что мужу не нравится, что она толстеет, сегодня поделилась, что он ей говорит, что она плохо готовит, точнее не готовит ничего особенного :( Не понимаю... С моей точки зрения (глубоко не вникая в проблему) так можно говорить только если пытаешься закрепить человека, чувствуя, что теряешь его... Есть такой момент, когда вроде бы все внешне нормально, но чувствуется начало разрыва. Мое ощущение, что мужчины это чувствуют четче и раньше... Некоторые начинают предпринимать различные превентивные, так сказать, меры.
Одна из них, как раз показать женщине, что она плохая жена, может быть даже плохая женщина, чтобы у нее в голове сложилось четкое ощущение, что она должна быть счастлива, что ее, такую вот негодяйку, пригрел таки, на своей волосатой груди такой замечательный, безупречный мужчина. Именно создать идеальный образ - задача всех подобных высказываний.Грустно, грустно то что многие любящие женщины воспринимают это как действительность и правду...
Справедливости ради, стоит отметить, что это могут быть попытки расставить все на свои места и жить по человечески, но ведь если ты хочешь счастливой семьи - делай счастливой свою женщину, хочешь чего-то особенного, сделай что-то особенное сам. Хочешь чтобы твоя женщина выглядела так как тебе хочется - начни с себя - стань красавцем и она сама за тобой потянется... Женщина она же тоже смотрит в зеркало и замечательно знает обо всех своих недостатках...
В общем, я этим просто хотел сказать если хочешь, чтобы твой любимый человек был таким, как тебе хочется, стань таким сам... И уж если через некоторое время не увидишь эффекта, тогда можешь быть уверен - тебя не любят, потому что когда любят, делают друг друга счастливыми, а не повторяют по 100 раз на день "Я тебя люблю". А состояние счастья - комплексное, сложное состояние, состоящее много из чего...
Всем хочется быть счастливыми и любимыми, но не все понимают как это сделать... Если ты до сих пор не понял(а), перечитай этот пост сначала.

Метки:  

Надо правильно делать техническое описание

Понедельник, 14 Января 2008 г. 22:52 + в цитатник
Действительно. если ты посто делаешь техническое описание, которое никому кроме тебя не понадобится - пожалуйста, пиши все что вздумается... Но если это схема взаимодействия!!! Почти неделю мучился с новым сервис провайдером наших SMS-сервисов... Ребята... это финиш! Описывать в схеме взаимодействия протокол связи который соотвтствует действительности только на 65% это неуважение себя своего и чужого труда. Я думал сойду с ума пока с ними состыкуюсь... Все работает согласно протоколу, а стыковка не происходит. Пришлось написать систему логирования входящих и исходящаих с сервера запросов, точнее тел запросов и на пальцах им доказать, что они по крайней мере не умеют описывать свою работу... Я понимаю, что им писали внешние программисты, но к работе надо относиться ответственне. В итоге дня три работы по мелочи, весь сегодняшний день и о, чудо, все заработало. Зато я доволен собой... Такое ощущение, как будто камень на гору вкатил... Короче все хорошо, что хорошо кончается...

Метки:  

Формат даты при сериализации XML ASP.NET

Воскресенье, 13 Января 2008 г. 23:09 + в цитатник
Возникла следующая проблема... Необходимо, чтобы веб-служба обменивалась информацией с потребителями (по протоколу HTTP) объектами. Способ обмена информации - сериализованные в формат XML объекты. Будем рассматривать объекты класса
[XmlRoot("Message")] //переименовываем название по-умолчания для того, чтобы в структуре XML файла узел назывался именно так
        public class SMSMessage {
            public SMSMessage() {}
            [XmlAttribute]
            public int id;
            [XmlAttribute("submit-date")] //присваиваем определенное имя данному атрибуту
            public DateTime submitdate;
            [XmlAttribute]
            public string msisdn;
            [XmlAttribute("service-number")]
            public string short_number;        
            [XmlAttribute("operator")]
            public string network;
            public Content content;
        }

Проблема заключалась в том, что сериализованный объект:
  <message id="1" submit-date="2007-12-15T13:03:47.703125+04:00" msisdn="79277338091" service-number="3533" operator="MFVolga">
    <content type="text/plain">Недвижимость</content>
   </message>

, при этом атрибут submit-sdate преобразует тип DateTime в строку согласно региональным текущим настройкам на данном компьютере. Так и не найдя настройки формата сериализации даты в XML в ASP.NET, я предлагаю следующий способ: вводим строковое свойство, которое будет брать и устанавливать дату внутреннего (типа private) атрибута объекта (здесь уже тип DateTime). Поле типа DateTime необходимо выставить в XmlIgnore для того, чтобы не происходило путаницы.
Результирующий класс можно оформить, например, следующим образом:
[XmlRoot("Message")]
public class SMSMessage
{
    public SMSMessage() { }
    [XmlAttribute]
    public int id;
    [XmlIgnore]
    public DateTime submitdate;
    [XmlAttribute("submit-date")]
    public string _submitdate
    {
        get
        {
            CultureInfo CInfo = new CultureInfo("en-US");
            return submitdate.ToString("dd-MMM-yy hh.mm.ss tt", CInfo).ToUpper();
        }
        set
        {
            CultureInfo CInfo = new CultureInfo("en-US");
            submitdate = DateTime.ParseExact(value, "dd-MMM-yy hh.mm.ss tt", CInfo);
        }
    }
    [XmlAttribute]
    public string msisdn;
    [XmlAttribute("service-number")]
    public string short_number;
    [XmlAttribute("operator")]
    public string network;
    public Content content;
    [XmlAttribute("ref-id")]
    public int ref_id;
}

при этом мы добиваемся желаемого эффекта! Серилизованный содержит атрибут submit-sate выглядит в том виде, как нам хотелось.
  <message id="1" msisdn="79277338091" service-number="3533" operator="MFVolga" submit-date="14-JAN-08 12.07.29 AM">
    <content type="text/plain">недвижимость</content>
   </message>
Добились того, чего хотели...



Рубрики:  Програмирование

Метки:  

С нами больше нет Геннадия Бачинского

Суббота, 12 Января 2008 г. 23:25 + в цитатник
Этот Великий Человек погиб сегодня в 16 часов в калужской области в автокатастрофе. Не верится даже... Он поднимал настроение, заряжал энергией на весь день, отдавал часть своей души каждому кто, слушал его утренние шоу со Стилавиным... +шоу, когда ремонт в домах делали... уж не помню как называлось, но замечательно вел. Все время вспоминал в каждом шоу про свою жену. Очень хороший был человек. Так много не успел сделать. :'( Очень жаль. Он все равно всегда будет восприниматься как живой... не он, скорее его голос, именно голос и настроение всегда будут рядом...

Метки:  

Наш проект. SMS.Недвижимость...

Суббота, 12 Января 2008 г. 17:21 + в цитатник
smsestate.ru Новое слово в науке и технике... :)

Метки:  

Аудио-запись: Трофим. Московская песня

Музыка

Суббота, 12 Января 2008 г. 13:58 (ссылка) +поставить ссылку

Метки:  
Комментарии (0)Комментировать

Аудио-запись: Владимир Высоцкий. Еще не вечер

Суббота, 12 Января 2008 г. 13:34 + в цитатник
Файл удален из-за ошибки в конвертации Влюбился в эту песню после того, как услышал ее на горе на Грушинском фестивале в 2007-м году. К сожалению не помню, точнее не знаю, кто исполнял ее тогда, но исполнение было просто неимоверным по энергетике!!! Во время всей песни по телу табунами носились мурашки.

Метки:  

Аудио-запись: Оксана Почепа. Утро без тебя

Суббота, 12 Января 2008 г. 12:11 + в цитатник
Файл удален из-за ошибки в конвертации

Метки:  

Видео-запись: Париж Новый Год

Вторник, 08 Января 2008 г. 22:30 + в цитатник
Просмотреть видео
317 просмотров

Прислал Илюха Сюсин, как очевидец и свидетель...
Завидую очень красиво...
Спасибо, что прислал...

Метки:  

OpenOffice.org Calc сводная таблица (DataPilot)

Воскресенье, 06 Января 2008 г. 11:41 + в цитатник
Бился над проблемой, как в OpenOffice сделать сводную таблицу, точнее ее сгенерировать. Ну например из набора данных, экспортированного на лист (см. предыдущие посты)
Делаем значит вот так:
  ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
  vDesktop := ServiceManager.createInstance('com.sun.star.frame.Desktop');
//Открываю шаблон
  Excel := vDesktop.LoadComponentFromURL('file:///'+Shablon,'_blank',0,VarArrayCreate([0, - 1], varVariant));
  Sheets := Excel.GetSheets;
  Sheet:=Sheets.getByIndex(0);
//Закидываем данные из Grid'а на первый лист в координаты X,Y
  Range:= VarArrayCreate([1,Grid.ColCount,1,Grid.RowCount],varVariant);
  For i:=0 to Grid.RowCount-1 do Begin
    For j:=0 to Grid.ColCount-1 do Begin
      Range[j+1,i+1]:=Grid.Cells[j,i];
  Sheet.getCellRangeByName(PointToRange(X,Y)+':'+PointToRange(X+Grid.ColCount-1,Y+Grid.RowCount-1)).setDataArray(Range);
//Далее создаем XDataPilotTablesSupplier. Этот код не отрабатывает
  xDPSupp:=Sheet.CreateInstance('com.sun.star.sheet.XDataPilotTablesSupplier');
//У Sheet нет метода CreateInstance
  xDPTables := xDPSupp.getDataPilotTables();


к сожалению вот на этом и затык. Т.е. данные на лист данных вываливаются как надо, а дальше затык...
Кстати,  естественно, все переменные Variant

Пробовал вместо
xDPSupp:=Sheet.CreateInstance('com.sun.star.sheet.XDataPilotTablesSupplier');
выполнять
xDPSupp:=Excel.CreateInstance('com.sun.star.sheet.XDataPilotTablesSupplier');
возвращается пустой объект
P.S.: задавал этот вопрос на delphikingdom.ru будем отслеживать ответы
см. http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=57767
Рубрики:  Програмирование

Метки:  

Александр Абдулов

Суббота, 05 Января 2008 г. 17:14 + в цитатник
Вот и нет человека... актера... большого актера...
Многи из фильмов с его участием мне не нравятся, действительно понравился после трилогии NEXT. Очень жалко, у него все только начиналось... Так много он еще мог сделать...
Мы его всегда будем помнить...

XML сериализация ASP.NET

Суббота, 15 Декабря 2007 г. 12:23 + в цитатник
Начну с пояснения что в моем понимании означает сериализация. Сериализация - проебразование объекта к определенной, стандартизованной структуре с возможностью обратного преобразования к исходной структуре. Например, можно сериализовать произвольный DataSet, после десериализации сериализованный объект загружается непосредственно в целевой DataSet.
Как правило объекты сериализуются в какие-то битовые структуры, в частности в строки. Как частный случай - XML сериализация, когда сериализованный объект представляется в виде строки, имеющей XML структуру. Это подход очень удобен при передаче данных по HTTP протоколу. Так как это текстовый протокол, то и передавать по нему можно только текст. Чтобы передать произвольный объект нам и пригодится XML-сериализация.
Здесь я приведу пример, как можно сериализовать объект и послать его по HTTP протоколу в методе POST и принять и преобразовать к объекту на клиенте:
Например, имеем описание объекта:
public class Content
        {
            public Content() {}
            [XmlAttribute] //означает, что атрибут бедут именно в структуре атрибута узла
            public string type = "text/plain";
            [XmlText] //основное значения узла
            public string MSG;
        }
        [XmlRoot("Message")] //переименовываем название по-умолчания для того, чтобы в структуре XML файла узел назывался именно так
        public class SMSMessage {
            public SMSMessage() {}
            [XmlAttribute]
            public int id;
            [XmlAttribute("submit-date")] //присваиваем определенное имя данному атрибуту
            public DateTime submitdate;
            [XmlAttribute]
            public string msisdn;
            [XmlAttribute("service-number")]
            public string short_number;        
            [XmlAttribute("operator")]
            public string network;
            public Content content;
        }
        [XmlRoot("sms-request")]
        public class SMSRequest {
            public SMSRequest(){}
            [XmlAttribute]
            public string version = "1.0";
            [XmlElement("message",typeof(SMSMessage))] //Указываем на то, что структура является контейнером для объектов типа SMSMessage
            public SMSMessage[] Messages;
        }
Пример сериализованного объекта выглядить следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<sms-request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
  <message id="1" submit-date="2007-12-15T13:03:47.703125+04:00" msisdn="79277338091" service-number="3533" operator="MFVolga">
    <content type="text/plain">Недвижимость</content>
  </message>
</sms-request>
Объектов <message> может существовать сколько угодно, т.к. sms-request является контейнером для данного класса

Как же происходит сериалисзация? Во первых для того чтобы были доступны все классы и методы, необходимо подключить сборки:
      using System.Xml.Serialization;
      using System.IO;
      using System.Web;
      using System.Xml;
Следующие несколько строк произведут сериализацию (преобразование объекта класса SMSRequest в строковую переменную:
           MemoryStream memoryStream = new MemoryStream();
            XmlSerializer serializer = new XmlSerializer(typeof(SMSRequest));
            XmlTextWriter xmlWriter = new XmlTextWriter(memoryStream,System.Text.Encoding.UTF8);
            xmlWriter.Formatting = Formatting.Indented;
            serializer.Serialize(xmlWriter, _SMSRequest);
            memoryStream = (MemoryStream)xmlWriter.BaseStream;
            string xml = UTF8ByteArrayToString(memoryStream.ToArray());
Теперь предположим, что у нас есть WEBService, который в качестве входного параметра получает объект типа SMSReqeust (его работу рассмотрим ниже). Вот этому сервису и передаем наш объект в методе POST:
            System.Net.WebRequest req = System.Net.WebRequest.Create("http://localhost/serviceXML.asmx/SMSko");
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xml);
            req.ContentLength = bytes.Length;
            System.IO.Stream os = req.GetRequestStream();
            os.Write(bytes, 0, bytes.Length);
            os.Close();
            System.Net.WebResponse resp = req.GetResponse();
            System.IO.StreamReader sr1 = new System.IO.StreamReader(resp.GetResponseStream());
            string ServiceResponce = sr1.ReadToEnd().Trim();
Вот таким вот нехитрым образом получаем ответ от WEB сервиса. Скорее всего сервис тоже отвечает нам сериализованным объектом. Точнее, не скорее всего, а точно, но это уже не принципиально. Рассмотрим работу данного сервиса. Хочу отметить, что он тоже должен знать структуру и особенности сериализации объекта SMSRequest, описанного выше. Для этого есть два способа: также описать класс в WEB-сервисе, либо вынести описание сериализуемого класса в отедльную сборку и использовать ее в клиентской и серверной части, точнее, на обоих концах цепочки POST-GET. Итак, имеем одинаковое описание сериализуемых классов...  Нам теперь надо реализовать функцию SMSko (см.  URL в System.Net.WebRequest req = System.Net.WebRequest.Create("http://localhost/serviceXML.asmx/SMSko");):
        System.Web.HttpRequest request = System.Web.HttpContext.Current.Request;
        System.Web.HttpResponse responce = System.Web.HttpContext.Current.Response;
        byte[] b = new Byte[request.InputStream.Length];
        if (request.InputStream.Length > 0)
        {
            b = request.BinaryRead((int)request.InputStream.Length);
        }
        //Десериализуем SMSRequest
        SMSRequest _SMSRequest = SMSRequest.Deserialize(b);
Теперь делаем что угодно с полученным объектом _SMSRequets и отправляем ответ. В нашем случае - объект  SMSResponce
[XmlRoot("sms-response")]
public class SMSResponce {
    public SMSResponce() {}
    public SMSResponce(SMSRequest SMSR) {
        Messages = new SMSMessage[SMSR.Messages.Length];
        for (int i = 0; i < SMSR.Messages.Length; i++)
        {
            Messages[i] = new SMSMessage();
            Messages[i].content = SMSR.Messages[i].content;
            Messages[i].ref_id = SMSR.Messages[i].id;
            Messages[i].msisdn = SMSR.Messages[i].msisdn;
            Messages[i].network = SMSR.Messages[i].network;
            Messages[i].short_number = SMSR.Messages[i].short_number;
            Messages[i].submitdate = DateTime.Now;
        }
    }
    public byte[] Serialize()
    {
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer serializer = new XmlSerializer(typeof(SMSResponce));
        XmlTextWriter xmlWriter = new XmlTextWriter(memoryStream, System.Text.Encoding.UTF8);
        xmlWriter.Formatting = Formatting.Indented;
        serializer.Serialize(xmlWriter, this);
        memoryStream = (MemoryStream)xmlWriter.BaseStream;
        return memoryStream.ToArray();
    }
    [XmlAttribute]
    public string version = "1.0";
    [XmlElement("message", typeof(SMSMessage))]
    public SMSMessage[] Messages;
    [XmlAttribute("delivery-notificaton-requested")]
    public string delivery_notificaton_requested = "false";
}

его можно удобно использовать, например вот так:
        SMSResponce _SMSResponce = new SMSResponce(_SMSRequest);
        UserResponse UR = IC.IncomeMessage(_SMSRequest.Messages[i].msisdn,
                _SMSRequest.Messages[i].short_number,
                _SMSRequest.Messages[i].content.MSG.ToUpper(),
                _SMSRequest.Messages[i].network.ToUpper());
        _SMSResponce.Messages[i].id = i;
        _SMSResponce.Messages[i].content.MSG ="Посетите наш сайт www.smsestate.ru";
теперь сериализуем объект, всего одна строчка!!!
         xml = UTF8ByteArrayToString(_SMSResponce.Serialize());
и отправляем его в responce:
        responce.Clear();
        responce.ContentType = "text/html";
        responce.Write(xml);
        responce.End();
Все... Наша связка по отправке-получению обеъктов готова...
Может возникнуть логичный вопрос, почему используем именно MemoryStream при сериализации? На самом деле выбрать кодировку (в нашем случае System.Text.Encoding.UTF8) можно только в случае использования MemoryStream или файлового обмена, сериализация непосредственно в строку по умолчанию использует кодировку utf-16 и изменить этот параметр никак нельзя. Так, что если вашим сервисам и приложениям позволительно работать в кодировке utf-16, можно использовать сериализацию непосредственно в строку без MemoryStream...

Всем успехов...
      
Рубрики:  Програмирование

Метки:  

OpenOffice.org Writer и шаблоны в Delphi

Суббота, 15 Декабря 2007 г. 11:45 + в цитатник
Хотел бы написать, как открыть шаблон и заменить там строки. При незначительных модификациях можно пробразовать в систему с шаблонами

//Открываем OpenOffice.org writer
        ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
        MainWordApp := ServiceManager.createInstance('com.sun.star.frame.Desktop');
        MainDoc := MainWordApp.LoadComponentFromURL('file:///'+Template,'_blank',0,VarArrayCreate([0, - 1], varVariant));
//замена - элементарная
       oReplace := MainDoc.createReplaceDescriptor;
       oReplace.SearchString:=searchStr;
       oReplace.ReplaceString:=replaceStr;
       oReplace.SearchRegularExpression:=false;
       MainDoc.replaceAll(oReplace);

Все переменные, естественно типа Variant
Рубрики:  Програмирование

Метки:  

Экспорт данных в OpenOffice.org Calc

Суббота, 15 Декабря 2007 г. 10:13 + в цитатник
Занимаюсь переводом документооборота юридической организации с MS Office на OpenOffice.org. Для начала скачал SDK, начиталсся api. Все было бы замечательно, если бы писал на .NET или Java, там просто подключаются сборки и все просто. Через COM в Delphi 7 почему то не все работает
Вот например кусок кода, как быстро выгрузить в OpenOffice.org большой массив данных:
var ServiceManager,vDesktop,Excel,Sheets,Sheet,Range:Variant;
    i,j:integer;
begin
..........
  ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
  vDesktop := ServiceManager.createInstance('com.sun.star.frame.Desktop');
  Excel := vDesktop.LoadComponentFromURL('file:///'+Shablon,'_blank',0,VarArrayCreate([0, - 1], varVariant));
//В случае, если необходимо создать новый документ, пишем:
//Excel := vDesktop.LoadComponentFromURL('private:factory/scalc','_blank',0,VarArrayCreate([0, - 1], varVariant))
  Sheets := Excel.GetSheets;
  Sheet:=Sheets.getByIndex(0);
//Выгружаем на лист данные объекта Grid типа TStringGrid
  Range:= VarArrayCreate([1,Grid.ColCount,1,Grid.RowCount],varVariant);
  For i:=0 to Grid.RowCount-1 do
    For j:=0 to Grid.ColCount-1 do
      Range[j+1,i+1]:=Grid.Cells[j,i];
  Sheet.getCellRangeByName(PointToRange(X,Y)+':'+PointToRange(X+Grid.ColCount-1,Y+Grid.RowCount-1)).setDataArray(Range);
end;

Стоит отметить, что функция VarArrayCreate создает массив из объектов типа varVariant, в данном случае - Variant, с двумя измерениями, где первый индекс изменяется от 1 до Grid.ColCount, второй от 1 до Grid.RowCount.
Sheet.getCellRangeByName может вызвать RunTime Exception в случае если размерность Range не совпадает с диапозоном, куда эти данные помещаются, а именно: PointToRange(X,Y)+':'+PointToRange(X+Grid.ColCount-1,Y+Grid.RowCount-1)

Для справки: удобная функция
Function PointToRange(X,Y:Integer):String;
Var S1,S2:String; k:Integer;
Begin
  Repeat
    k:=X mod 27;
    S1:=Letters[k+1]+S1;
    k:=X div 26;
  until k<=X;
  S2:=IntToStr(Y+1);
  Result:=S1+S2
End;
, где Const Letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Рубрики:  Програмирование


Поиск сообщений в Бляндер
Страницы: [2] 1 Календарь