вторник, октября 23, 2007

Экспорт из DataGrid в Excel через буфер

Немного переделал функцию по экспорту данных из dataProvider'а DataGrid в Excel. В качестве источника данных выступает ArrayCollection.

private function exportToExcel(dg:DataGrid, fields:Array):void
{
var dp:ArrayCollection = dg.dataProvider as ArrayCollection;
if (dg == null || dp==null || dp.length==0 || fields == null || fields.length==0) {
Alert.show("Ошибка экспорта.");
return;
}
var i:int;
var j:int;
var l_dp:int = dp.length;
var l_f:int = fields.length;
var result:String = "";
for (i=0; i<l_f; i++)
{
result += fields[i][1];
if (i!=(l_f-1)) result+='\t';
}
result +='\r\n';
for (i=0; i<l_dp; i++)
{
for (j=0; j<l_f; j++)
{
var prop:String = fields[j][0];
var l_col:int = dg.columns.length;
var k:int;
for (k=0; k<l_col; k++)
{
if (prop == dg.columns[k].dataField)
{
break;
}
}
var f:Function = dg.columns[k].labelFunction;
if (f != null)
{
result += f(dp[i], dg.columns[k]);
}
else result += dp[i][prop];
if (j!=(l_f-1)) result+='\t';
}
result +='\r\n';
}
System.setClipboard(result);
}

Вызываем так:

exportToExcel(grd,
[['title','Заголовок'], ['rank','Рейтинг'],
['views', 'Просмотров'],['comp', 'Конкурсы'],
['access', 'Доступность'], ['pics','Количество изоб-й']])
,

grd - id нашего DataGrid, а делее идет массив с dataField и заголовками колонок.
При экспорте также учитывается labelFunction. После выполнения функции данные можно смело вставлять в таблицу Excel.

7 комментариев:

Анонимный комментирует...

Чел, ну ты даешь. Дайте линейку мне, нужно измерить восторг! :-)

Andrey Gorbatov комментирует...

Спасибо, Рост.

Ivan комментирует...

Статью надо было назвать ваши убитые недели...
Сколько читаю этот блог всегда приятно удивляюсь мыслям этого человека. +++
Очень хотелось бы чтоб статей бало побольше)))

Andrey Gorbatov комментирует...

теперь дайте линейку мне :)
очень рад, что это кому-то помогло.

Ivan комментирует...

Эту супер полезную статью я прочитал давно, но реально её применить понадобилось только на днях. И вот с какой я столкнулся проблемой. В флексе для расчета мат. выражений используется символ разделителя "." ,а в Excel'e это "," т.о. после экспорта не очень удобно работать с этими данными. Очень хотелось бы получить ответ на этот вопрос. Заранее спасибо.

Анонимный комментирует...

Огромное спасибо

Анонимный комментирует...

анализ разработки разработка сайтов http://web-miheeff.ru анализ разработки