Привет королевству! Не поможете разобраться с сортировкой в столбце для Excel 2007? Был уже везде где только можно, в списке вопросов нашел решение, но только для Excel 2003, что мне не подходит. Вот так оно выглядит в тексте:
Должно вроде бы все правильно быть, брал значения параметров с сайта MSDN для MS Excel 2007. Однако на все попытки выдает одну и ту же ошибку класса EVariantTypeCastError о невозможности перекодировать варианту типа Error в булевский тип. Какой же из 15 параметров неверен? Имел похожие неудобства с открытием xlsx-файла и с его сохранением, там тоже океан параметров, но там удалось подобрать нужную комбинацию. Здесь же никак не получается.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
02-12-2008 06:32 | Комментарий к предыдущим ответам
Большое спасибо за проделанный труд! Завтра попробую, вдруг что получится. А версия Excel у меня действительно 12-я с чем-то еще. Это означает только возможность сортировать с помощью второго метода - позднего связывания? Но там же опять вроде как OleVariant выплывает :-0 Правильно ли я Вас понял, что методом Sort объекта Range сделать это для MS Excel 2007 в настоящий момент не представляется возможным? И еще интересный вопрос по поводу библиотеки Microsoft Excel 12.0 Object Library. Куда Вы ее импортировали - в Delphi или просто зарегили в системе? Мне ее тоже нужно подключить, чтобы заработало? Извиняюсь заранее, если мои вопросы кажутся тупыми :)
Работает! Теперь Delphi for Win32 (BDS2006). Я импортировал библиотеку Microsoft Excel 12.0 Object Library чтоб испробовать раннее связывание - работает!
Как и ожидалось работает тоже. Так что придется проверять версию Excel, если 12 и выше, то работать через позднее связывание, если нужна поддержка более ранних версий офиса.
Вот такие очередные грабли приготовила нам корпорация Майкрософт :-)
Ок, интересно было бы взглянуть на результаты Ваших экспериментов. Авось получится отсортировать встроенным методом, а не изобретать лисапед с помощью переменной типа OleVariant :)
15-10-2008 09:54 | Комментарий к предыдущим ответам
В ЧаВо используется юнит Excel2000, потому параметров и не хватает, но я пробовал с ExcelXP - не работает, пишет "неправильная ссылка" (естественно, ведь уже объект). У меня появилась идея - завтра попробую сортировку из Visual C# 2008, там должна быть ссылка уже на нужную сбоку Microsoft.Office.Interop.Excel.dll
15-10-2008 09:42 | Комментарий к предыдущим ответам
>>>библиотеками типов теперь ячейки не отсортировать...
В смысле теми библиотеками ExcleXXX.pas, что в поставке BDS2006. Нужно попробовать импортировать библиотеку Excel2007
Записанный макрос показывает что кое что изменилось в Excel 2007 в местоде Sort:
Sub Макрос1()
' Макрос1 Макрос
'
ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B4:B18"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Лист1").Sort
.SetRange Range("B3:B18")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Здесь уже метод сорт принадлежит Worksheet вместо Range, как у предыдущих версий, да и сам сорт уже не метод, а тоже объект (или класс?). Хм... Совместимость потеряна :(
Т.е. библиотеками типов теперь ячейки не отсортировать...
Мдя уж... Worksheet.Sort PropertySort Object
Я тоже использую юнит ExcelXP, насчет версии TLB не знаю, не приходилось прежде вплотную с этим сталкиваться. Вариант из ЧаВо не проходит - мой BDS 2006 все время сообщает, что мало параметров :(
Если вы внимательно посмотрите на Как отсортировать область ячеек? , то заметите что практически все параметры заданы, даже если они не нужны по логике или описаны на MSDN как optional. Это связано с конвертированием данных "на лету"...
>>>Должно вроде бы все правильно быть, брал значения параметров с сайта MSDN для MS Excel 2007
В ссылке, что я указал, используется юнит ExcelXP. Интресно какую версию TLB используете вы ;)
Если не получится, будем искать вместе :)
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.