Ошибка при генерации отчёта через ExcelStrategyReport
Atom Ответить
16.08.2010


При вызове 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:


Теги:


Спасибо:



Скидка 15% на все продукты до 5 апреля (осталось 6 дней).

19 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


А если указать без пути?

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


т.е. с пустым путём? конструктора с 1м параметром там нет
new ExcelStrategyReport(strategy, "").Generate();

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


Я имел ввиду new ExcelStrategyReport(strategy, "1.xls").Generate();

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


Тоже самое, возникает ошибка. Xml отчёт при этом генерируется на ура

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


А какая версия офиса?

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


2010

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


Такой разве есть? Я тестил на 2003 и на 2010.

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


наверное на 2003 и 2007 =)

2010 в мае вышел написано:

http://ru.wikipedia.org/wiki/Microsoft_Office_2010

я где-то тогда и поставил себе

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


Ага, 2007.

Насчет 2010 не уверен. У меня такая трабла была, когда версия была не
та для офиса. Ошибка 2146827284 - это считайте все, что угодно.

В 2.3 я полностью переделываю код работы с Эксель. Там не через API
будет, а напрямую файл создаваться. Так мне кажется универсальнее.
Если хотите, могу отослать код ExcelReport чтобы его можно было
подогнать под 2010. Но это самостоятельно =)

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


Мне не критично, я просто тестировал, думал чего ещё реализовать в
роботах =)
Тем более моя работа не поможет проекту. Подожду 2.3. Я так понимаю её
дней через 10 уже можно ждать =)

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


Не, не через 10... Я там новшество одно ввожу. Так что может
затянутся.

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.08.2010
Ответить


Скачал 2010. Пока не устанавливал... Что воодушевляет - офис написан
на .NET FW. Прямо как S# =)

Спасибо:

Alexander

Фотография
Дата: 18.08.2010
Ответить


Сегодня впервые робот на 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();
Автор топика
Спасибо:

Alexander

Фотография
Дата: 18.08.2010
Ответить


Никаких мыслей пока нет? Сегодня попробую вечером сгенерировать отчёт,
пока работает без ошибок весь день - заменил снятие заявок на старое,
через 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;
}

Но в случае когда пропадает связь и время не отображается это не
помогает (скрин выше - то что получил час назад судя по логу).

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.08.2010
Ответить


Насчет ошибки с отчетом - это значит задержка получилась
отрицательной. Пока не выяснил, это какая-то особенность или
неправильный расчет.

Насчет необрабатываемого исключения. Уверены? Судя по скрину - он то
как раз обрабатываемый. Я специальное в try catch обернул получение
времени из Квика.

Но доп проверку на время поставить не мешает.

Спасибо:

Alexander

Фотография
Дата: 19.08.2010
Ответить


Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.08.2010
Ответить


Оно все как раз так и реализовано. Если ошибка - просто возвращается
по старому (системное со смещением). А Вы если что-то правите, лучше
делайте наследника и переопределяйте методы.

Насчет игнорирования - отпишитесь от события ProcessDataError. Только
так лучше не делать =)

Спасибо:

Alexander

Фотография
Дата: 19.08.2010
Ответить


Переопределил, сегодня с утра попробовал просто использовать
base.MarketTime - событие CandlesFinished не приходило до 10:01:57 (у
меня 1 и 5-минутки фьючерса ртс). Как то может быть связано с
неправильным временем? (как раз с тем, что первые пару минут неверное
время отображается в самом квике. просто раньше не замечал такого
долгого формирования свечек на открытии сессии...)

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.08.2010
Ответить


Связанно прямо. TimeFrameCandle опираются как раз на данное время.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy