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 комментариев:
Чел, ну ты даешь. Дайте линейку мне, нужно измерить восторг! :-)
Спасибо, Рост.
Статью надо было назвать ваши убитые недели...
Сколько читаю этот блог всегда приятно удивляюсь мыслям этого человека. +++
Очень хотелось бы чтоб статей бало побольше)))
теперь дайте линейку мне :)
очень рад, что это кому-то помогло.
Эту супер полезную статью я прочитал давно, но реально её применить понадобилось только на днях. И вот с какой я столкнулся проблемой. В флексе для расчета мат. выражений используется символ разделителя "." ,а в Excel'e это "," т.о. после экспорта не очень удобно работать с этими данными. Очень хотелось бы получить ответ на этот вопрос. Заранее спасибо.
Огромное спасибо
анализ разработки разработка сайтов http://web-miheeff.ru анализ разработки
Отправить комментарий