Показаны сообщения с ярлыком Excel. Показать все сообщения
Показаны сообщения с ярлыком Excel. Показать все сообщения

понедельник, 18 января 2016 г.

MS Excel - посчитать разность дат

Ексель полон сюрпризов. Помнится, то ли в 2000, то ли в 2003 там в качестве пасхалки присутствовали даже гоночки. А теперь это.

Потребовалось рассчитать возраст человека на определенную дату. На первый взгляд, подходящей функции в екселе нет. Однако, оказывается, это не так:
=РАЗНДАТ(B1;A1;"y") - количество полных лет
=РАЗНДАТ(B1;A1;"ym") - количество полных месяцев свыше полных лет
=РАЗНДАТ(B1;A1;"md") - количество дней свыше полных месяцев

Подсмотрел тут:
http://www.planetaexcel.ru/techniques/6/105/
http://www.excel-office.ru/formulivexcel/schitaemvosrastvexcel

понедельник, 12 декабря 2011 г.

Excel 2007 - недопустимое расположение серверных черновиков

Неожиданно Excel 2007 при попытке сохранить настройки стал выдавать ошибку "Указано недопустимое расположение серверных черновиков для автономного редактирования, либо отсутствуют разрешения на доступ к этому расположению. Укажите расположение на этом компьютере". Ну как неожиданно - просто перенесли папку "D:\Мои документы" в "C:\Documents and Settings\User\Мои документы". При этом, что интересно, хитрая программа отказывается сохранять настройки этих самых черновиков (в группе "Сохранение").

Решение оказалось таким: прописать вручную в реестре следующее:

[HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Offline\Options]
"Local"=dword:00000001
"Location"="C:\\Documents and Settings\\User\\Мои документы\\Черновики SharePoint"

среда, 24 августа 2011 г.

Excel 2007 - добавление своей кнопки на ленту

Задача оказалась довольно простой. Раньше, в 2003, чтобы добавить кнопку на тулбар, приходилось обрабатывать событие Open рабочей книги. В 2007 делается по-другому.

1. В самой книге открываем редактор VBA, в котором пишем нужную подпрограммку с обязательным параметром:
Sub МояПодпрограмма(control As IRibbonControl)
MsgBox "Кнопку нажали"
End Sub

2. Книгу сохраняем в файл, например, myFile.xlsm. У этого файла меняем расширение на zip и распаковываем его в отдельную папку.

3. В этой папке (можно и не в корне) создаем файл с именем, например, customUI.xml в кодировке utf-8 примерно такого вида:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="Моя закладка">
<group id="SampleGroup" label="Моя группа кнопок">
<button id="Button" label="Выполнить мою программу" imageMso="HappyFace" size="large" onAction="МояПодпрограмма" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>


4. В папке _rels есть файл .rels (тоже имеет структуру xml), в котором надо прописать следующую строку:
<Relationship Id="какой-нибудь ID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="местонахождение customUI.xml из п.3" />

5. Весь этот зоопарк запаковываем обратно в файл myFile.xlsm.

вторник, 9 ноября 2010 г.

Ошибка при взаимодействии с Excel

На одном компьютере (WinXP MSOffice 2007) при попытке выгрузить отчет из самописной (.NET 3.5) программы в Excel проявилась следующая ошибка: Невозможно привести COM-объект типа "Microsoft.Office.Interop.Excel.ApplicationClass" к интерфейсному типу "Microsoft.Office.Interop.Excel._Application". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-объекта для интерфейса с IID "{000208D5-0000-0000-C000-000000000046}" возвратил следующую ошибку: Ошибка при загрузке библиотеки. (Исключение из HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

Ну да, программа компилировалась на компе с MSOffice 2003, и это наложило определенный отпечаток на набор ее библиотек. Но ведь на других станциях всё работает... Единственная особенность - на проблемной машине зачем-то были установлены primary interop assemblies 2007. В итоге помог метод грубой силы: деинсталляция этих самых assemblies и восстановление офиса.

UPD 2018-08-10: По крайней мере, в одном случае удалось установить причину этой ошибки. Как оказалось, по адресу HKEY_CLASSES_ROOT\Interface\{000208D5-0000-0000-C000-000000000046}\TypeLib лежит некий guid (в моём случае {00020813-0000-0000-C000-000000000046}) и номер версии, который нужно использовать (в моём случае 1.6).

Так вот, в ветке реестра HKCR\TypeLib\{00020813-0000-0000-C000-000000000046} перечислены разные версии, и среди них оказалась одна запись (1.9), оставшаяся от деинсталлированного офиса 2010. Если эту запись, отсылающую к несуществующей версии excel-а, удалить, то ошибка пропадает.

Навело на решение это обсуждение.