При вызове new ExcelStrategyReport(strategy, "c:\1.xls").Generate(); возникает ошибка, ниже прилагаю трассу: (xml генерируется нормально)
System.Runtime.InteropServices.COMException was unhandled by user code HelpLink=xlmain11.chm Message=Введено недопустимое имя для листа или диаграммы. Убедитесь, что:
- длина введенного имени не превышает 31 знака;
- имя не содержит ни одного из следующих знаков: : \ / ? * [ или ];
- имя не оставлено пустым. Source=Microsoft Excel ErrorCode=-2146827284 StackTrace: at Microsoft.Office.Interop.Excel._Worksheet.set_Name(String RHS) at Ecng.Trading.Algo.ExcelStrategyReport. (Sheets , String ) at Ecng.Trading.Algo.ExcelStrategyReport. () at Ecng.Trading.Algo.ExcelStrategyReport.Generate() at Robots.MainWindow.MainWindow.OnClosing(CancelEventArgs e) in C:\Users\Alexander\Documents\Visual Studio 2010\Projects\Robots\Robots \MainWindow\MainWindow.xaml.cs:line 65 at System.Windows.Window.WmClose() InnerException:
Comentários (19)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
А если указать без пути?
т.е. с пустым путём? конструктора с 1м параметром там нет new ExcelStrategyReport(strategy, "").Generate();
Я имел ввиду new ExcelStrategyReport(strategy, "1.xls").Generate();
Тоже самое, возникает ошибка. Xml отчёт при этом генерируется на ура
А какая версия офиса?
2010
Такой разве есть? Я тестил на 2003 и на 2010.
наверное на 2003 и 2007 =)
2010 в мае вышел написано:
http://ru.wikipedia.org/wiki/Microsoft_Office_2010
я где-то тогда и поставил себе
Ага, 2007.
Насчет 2010 не уверен. У меня такая трабла была, когда версия была не та для офиса. Ошибка 2146827284 - это считайте все, что угодно.
В 2.3 я полностью переделываю код работы с Эксель. Там не через API будет, а напрямую файл создаваться. Так мне кажется универсальнее. Если хотите, могу отослать код ExcelReport чтобы его можно было подогнать под 2010. Но это самостоятельно =)
Мне не критично, я просто тестировал, думал чего ещё реализовать в роботах =) Тем более моя работа не поможет проекту. Подожду 2.3. Я так понимаю её дней через 10 уже можно ждать =)
Не, не через 10... Я там новшество одно ввожу. Так что может затянутся.
Скачал 2010. Пока не устанавливал... Что воодушевляет - офис написан на .NET FW. Прямо как S# =)
Сегодня впервые робот на Stock# 2.2.1 проработал весь день - в конце дня у меня по планам была генерация отчёта, в итоге возник такой exception:
System.ArgumentOutOfRangeException was unhandled by user code Message=Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks. Parameter name: ticks Source=mscorlib ParamName=ticks StackTrace: at System.DateTime..ctor(Int64 ticks) at Ecng.Common.TimeSpanEx.ToString(String format, IFormatProvider formatProvider) at Ecng.Common.TimeSpanEx.ToString(String format) at Ecng.Trading.Algo.XmlStrategyReport.Generate() at Robots.MainWindow.MainWindow.OnClosing(CancelEventArgs e) at System.Windows.Window.WmClose() InnerException:
Отчёт генерирую для каждой стратегии через var fileNameXml = "{0} _{1}.xml".Put(DateTime.Now.ToString("MM_dd"), strategy.Portfolio.Name); new XmlStrategyReport(strategy, Path.Combine("c:
", fileNameXml)).Generate();
Никаких мыслей пока нет? Сегодня попробую вечером сгенерировать отчёт, пока работает без ошибок весь день - заменил снятие заявок на старое, через Trader.CancelOrder
Ещё заметил такую вещь, ещё начиная с 2.1 - периодически пропадает связь или, к примеру, перед торгами - в нижнем левом углу Квика просто в этом случае не отображается текущее время. Тогда вылетает эксепшен необрабатываемый:
http://img.pixs.ru/storage/3/8/5/123png_1161875_897385.png
Мелочь, а не приятно =) Можно вместо этой ошибки выдавать просто текущее время? У некоторых брокеров, которыми я пользуюсь, в первые секунды (а то и пару минут) торгов время не идёт в нижнем левом углу - опять же, ошибка возникает. Я сейчас использую следующую функцию-заглушку: static public DateTime GetMarketTime(ITrader trader) { return trader.MarketTime.TimeOfDay < new TimeSpan(10, 5, 0) ? DateTime.Now : trader.MarketTime; }
Но в случае когда пропадает связь и время не отображается это не помогает (скрин выше - то что получил час назад судя по логу).
Насчет ошибки с отчетом - это значит задержка получилась отрицательной. Пока не выяснил, это какая-то особенность или неправильный расчет.
Насчет необрабатываемого исключения. Уверены? Судя по скрину - он то как раз обрабатываемый. Я специальное в try catch обернул получение времени из Квика.
Но доп проверку на время поставить не мешает.
Оно все как раз так и реализовано. Если ошибка - просто возвращается по старому (системное со смещением). А Вы если что-то правите, лучше делайте наследника и переопределяйте методы.
Насчет игнорирования - отпишитесь от события ProcessDataError. Только так лучше не делать =)
Переопределил, сегодня с утра попробовал просто использовать base.MarketTime - событие CandlesFinished не приходило до 10:01:57 (у меня 1 и 5-минутки фьючерса ртс). Как то может быть связано с неправильным временем? (как раз с тем, что первые пару минут неверное время отображается в самом квике. просто раньше не замечал такого долгого формирования свечек на открытии сессии...)
Связанно прямо. TimeFrameCandle опираются как раз на данное время.