none
внесение данных из коллекции в лист excel RRS feed

  • Вопрос

  • Добрый день

    Понадобилось исправить несколько исходников. Язык знаю мало. Отсюда и два глупых вопроса:

    Есть объявленная коллекция, используемая как ассоциативный массив

    System::Collections::Generic::Dictionary<string^, microsoft::office::interop::excel::range^=""> ^Reestr = </string^,><string^, microsoft::office::interop::excel::range^="">gcnew System::Collections::Generic::Dictionary<string^,microsoft::office::interop::excel::range^>();</string^,microsoft::office::interop::excel::range^></string^,>

    В нее вносится строковый ключ и диапазон ячеек

    Reestr->Add(Convert::ToString(((Microsoft::Office::Interop::Excel::Range^)ObjSheet->Cells[i,4])->Value2), (Microsoft::Office::Interop::Excel::Range^)ObjSheet->Range["A"+Convert::ToString(i),"R"+Convert::ToString(i)]); 

    где ObjSheet соответственно Excel`евский лист, i- итерационный счетчик.

    Теперь собственно вопрос. А как это обратно достать из коллекции и внести в новую книгу excel? Сколько не пытался, не смог избавиться от runtime ошибок. Не получается получить значение из Range, внесенного в коллекцию. Делал так

    Microsoft::Office::Interop::Excel::Application ^ObjExcel = gcnew Microsoft::Office::Interop::Excel::Application();
    Microsoft::Office::Interop::Excel::Workbook ^ObjWorkBook;
    Microsoft::Office::Interop::Excel::Worksheet ^ObjSheet;
    ObjWorkBook = ObjExcel->Workbooks->Add(Type::Missing);
    ObjSheet = (Microsoft::Office::Interop::Excel::Worksheet^) ObjWorkBook->Sheets[1];
    ObjExcel->Visible=true;
    int i=0;
    for each (System::Collections::Generic::KeyValuePair<string^, microsoft::office::interop::excel::range^=""> kvp in Reestr) {
    	System::Windows::Forms::MessageBox::Show(Convert::ToString(kvp.Key));			// Ключ возвращается
    	System::Windows::Forms::MessageBox::Show(Convert::ToString(kvp.Value->Cells[1,1]));		// А значение вызывает ошибку.
    }
    ObjExcel->Quit();</string^,>

    Чувствую с типами напутал.Но поправить не получилось.

    И вопрос. Как полностью зовется этот язык? В гугле и мсдн синтаксис C++ выглядит намного попроще, а тут какие-то мастодонты получаются.







    Да я просто почитать зашел :-)




    • Изменено Mike Kh 12 февраля 2012 г. 17:14
    12 февраля 2012 г. 17:10

Ответы

  • Здравствуйте.

    Язык называется C++/CLI, о нем вы можете почитать - C++/CLI: язык Visual C++ для среды .NET и C++/CLI — «клейкий» язык

    По 2ому вопрос вставляйте данные так:

    1) Для range из словаря вызывайте метод Copy

    2) На новом листе выбирайте нужное место для вставки данных, т.е.

    Range^ r2 = worksheet->Cells[2, 5];
    // или так  worksheet->Range["A3", "C6"];


    3) Вызываете

    r2->Select();
    worksheet->Paste();

    Данные должны перенестись.

    Также можете посмотреть тему Read all the cell values from a given range in excel, она может оказаться полезной. Там хоть и C#, но думаю трудностей с переводом в C++/CLI возникнуть не должно.


    Для связи [mail]

    • Предложено в качестве ответа Geokish 14 февраля 2012 г. 16:50
    • Помечено в качестве ответа Abolmasov Dmitry 28 февраля 2012 г. 12:37
    14 февраля 2012 г. 9:49