Archive for the ‘Programming’ Category

Файлы Excel с диаграммами и без.

Sunday, April 8th, 2007

Excel таблицы создавать проще чем казалось бы. Нынешние MS Office средства позволяют создавать подобные таблицы с диаграммами используя симбиоз технологий HTML + XML+ VML

Итак. Для создания простой таблицы с данными создаём файл, который содержит:

<html>
  <body>
    <table>
      <tr>
        <td>1</td>
      </tr>
      <tr>
        <td>2</td>
      </tr>
      <tr>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
      </tr>
    </table>
  </body>
</html>

Сохраним файл под именем excelfile.xls, откроем его с помощью MS Excel и получим результат:

Excel file

Как видно - результат ничем не отличается от варианта создания файла в самом MS Excel за исключением разграничения ячеек сероватым стандартным цветом. Для того, чтобы исправить этот “баг” (или фичу) вносим следующие правки:

<body style="border:.5pt solid silver;">

excel file with borders

Для того, чтобы использовать формулы в таблицах - определяем xml namespace urn:schemas-microsoft-com:office:excel:

<html
    xmlns:x="urn:schemas-microsoft-com:office:excel">

Далее пример использования функции SUM (сумма) и простого сложения значений ячеек с использованием нового аттрибута x:fmla:

<html
     xmlns:x="urn:schemas-microsoft-com:office:excel">
  <body style="border:.5pt solid silver;">
    <table>
      <tr>
        <td>1</td>
      </tr>
      <tr>
        <td>2</td>
      </tr>
      <tr>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
      </tr>
      <tr>
      	<td style="width: 48pt"
             x:fmla="=SUM(A1:A4)"></td>
      </tr>
      <tr>
        <td x:fmla="=A1+A2"></td>
      </tr>
    </table>
  </body>
</html>

Я добавил ещё определение ширины для ячейки, где выводится сумма style=”width: 48pt” (48pt - это стандартная ширина ячейки в excel):

Excel file with formula

Добавляем диаграмму:
Дописываем ещё один namespace:

<html xmlns:x="urn:schemas-microsoft-com:office:excel"
        xmlns:v="urn:schemas-microsoft-com:vml">

И после определения таблицы дописываем кусок xml кода


Это минимальный набор инструкций, которых необходимо для корректного отображения диаграммы. При просмотре XML всё становится понятным из названий тегов. Что на мой взгляд может показаться непонятным:

  • x:ClientData ObjectType=”Chart” - эта инструкция говорит о том, что это и есть именно диаграмма, а не другой какой-нибудь объект
  • Scaling - тут указываются два блока определений Scaling, для горизонтальной и вертикальной оси, MaxMin можно заменить на MinMax, тогда данные будут “отсортированы” от минимального к максимальному
  • x:DataSource - если DataSource равен 0, значит данные будут браться по указанной в x:Data ссылке из листа данных, если же равен -1, но данные записываются прямо в x:Data
  • x:Type - тут указывается тип диаграммы. В нашем случае это Line. Может быть например Bar, Pie и др.
  • Для добавления ещё одной линии данных нужно продублировать блок x:Series соответственно изменив блок с данными

Excel file with diagram

Пример созданного файла: excelfile.zip

Українська локалізація JSCalendar v1.0

Saturday, December 23rd, 2006

ukranian localization jscalendarПредставляю українську локалізацію відомого JavaScript’ового календаря JSCalendar v1.0. Шукав в Інтернеті - не знайшов. Взагалі то там і перекладати майже нічого. Але нехай валяється.

Файл локалізації

Спасаем ввод пользователя

Saturday, December 16th, 2006

Очень часто приходится редактировать свои данные с помощью больших форм. Иногда формы бывают ну просто неоправданно большие. Либо же само заполнение по-разным причинам занимает много времени (письмо, отчёт). Заполнив форму наполовину случайно не туда ткнуть пальцем - и страница или обновляется или делает back. А бывают ещё те мышки, у которых по бокам две жирные кнопяры. Эти кнопки в броузере играют роль ВПЕРЁД и НАЗАД. В общем данные теряются.

туда-сюда
(кстати, только сейчас заметил, что у меня в ИЕ надпись back есть, а forward нет)

Дабы избавить пользователя своего сервиса от таких вот глупых неприятностей, можно ввести javascriptовую проверку, были ли изменены данные формы. Если изменения произошли - то запрашивать подтверждение типа “Осторожно, вы не сохранили ваши данные. Продолжить?”, если нет, то отпускать без лишних вопросов.

вопрошание

В двух словах:
нужно задать событие window.onbeforeunload. В нём делать проверку были ли произведены изменения в этом сеансе работы. если не было изменений возвращать window.undefined, в противном случае возвращать строку предупреждения. Самое интересное, что это делается средствами броузера. Он сам спрашивает “Are you sure you want to navigate away from this page?” (firefox), а Вам нужно указать только лишь возможные последствия того, что может случиться в случае незасабмичивания формы.

пример кода: onunload.zip (630 Байт)

Проверка существования домена.

Wednesday, November 15th, 2006

Как проверить занят домен в определённой зоне или не занят? Как это делают провайдеры и регистраторы доменов?

checkdomain.png

Ничего на самом деле сложного в этом нет. Для этого не нужно абсолютно никаких платных сервисов.
Любой зоне соответствует свой WHOIS сервер. Через который можно узнать подробную информацию о человеке/организации, на которую зарегистрирован тот или иной домен. Нопример зоне ua соответствует сервер whois.com.ua. Он также отвечает за домены второго уровня таких как net.ua, com.ua и т.д. Также получить данные по украинским доменам можно через глобальный сервер whois.ripe.net.

Пример реализации на PHP с использованием сокетов:

$connection = @fsockopen("whois.com.ua", 43);
fputs($connection, "drozdov.com.ua");
$buffer = "";
while (!feof($connection)) {
$buffer. = fgets($connection, 4096);
}
fclose($connection);
if (strpos($buffer, "No entries found for domain")){
// домен свободен
} else {
// домен занят
}

Хочу заметить, что все сервера выдают разные сообщения об ошибке, по которым делается вывод о том, что домен не зарегистрирован. На whois.com.ua он такой, как в примере (No entries found for domain), но на других серверах он может быть совсем другим. Например:

  • на сервере whois.ripn.net, который отвечает за зону RU - отрицательный ответ выглядит “No entries found for the selected source(s).”
  • сервер whois.afilias.info, отвечающий за зону INFO, выдаёт просто “NOT FOUND”
  • и т.д

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

Yandex.XML + Java. Пример использования.

Sunday, September 24th, 2006

Вот набросал классик, который можно использовать как площадку для старта в использовании Яндексового сервиса XML.

Принцип работы: отсылаем самый простой запрос (в данном примере самый простой) POST методом. И тут же получаем в ответ результат поиска. Данные приходят в UTF-8. Класс автономный, за исключением использования JDOM для парсинга XML. Так что не забудте в CLASSPATH включить ждарку jdom.

Исходник: XmlYandex.zip (1.390 Б) - без JDOM.