2015-12-11 209 views
1

我需要能够将HTML表格导出为CSV。我在某处发现了一个片段;它的工作原理,但不完全是我想要的。Jquery将表格导出到csv隐藏表格单元格

在我的桌子(在小提琴中)我有隐藏的领域,我只是使用快速ñ脏内联样式和内联onclicks之间交换你看到的。

我想要的出口是它选择当前显示的表。所以只有td的地方style="display:table-cell"。我知道如何在普通的JS中做到这一点。

document.querySelectorAll('td[style="display:table-cell"])'); 

但我该如何使用我现在在exportTableToCSV函数中的代码来做到这一点?

(抱歉,小提琴中的文字是荷兰语,因为它是直播版的直接副本)。 小提琴: http://jsfiddle.net/5hfcjkdh/

回答

0

在你grabRow方法可以过滤掉使用jQuery's :visible selector隐藏的表格单元格。下面是一个例子

function grabRow(i, row) { 

    var $row = $(row); 
    //for some reason $cols = $row.find('td') || $row.find('th') won't work... 
    //Added :visisble to ignore hidden ones 
    var $cols = $row.find('td:visible'); 
    if (!$cols.length) $cols = $row.find('th:visible'); 

    return $cols.map(grabCol) 
          .get().join(tmpColDelim); 
} 
0

这是我如何解决它。决定退出纯粹的JavaScript解决方案,从客户端处理压力,并转而处理服务器端。

因为我已经使用存储过程从数据库中获取数据,我使用它只是再次获取数据集并将其转换为ViewExportModel,所以我有一个TotalViewExport和一些修剪的变体(重用大多数)基于我选择的变量填充不同的模型。

添加到excisting show函数来更新Selected变量以跟踪当前选定的视图。

当用户点击Export table excel时,它会调用当前页面的控制器IE。 AlarmReport(所以AlarmReportController)和我创建的行动ExportReports(INT?SelectedView);

另外我还添加了CsvExport作为经理。这需要数据结果(所以c#models/iqueryables/lists/etc)。并将它们放入一个Csv集合中。使用返回类型BinaryContent可以导出一个.csv文件与这个数据。

操作ExportReports使用selectedview参数调用存储过程。结果被抽入正确的模型。这个模型作为行被抽入CsvExport模型。

文件名基于选定的视图+选择了什么对象+当前日期(yyyy-MM-dd)。例如“Total_Dolfinarium_2016-05-13”。让

最后的动作返回使用BinaryContent返回类型和ExportToBytes从CsvExport

这一行动的部分出口.csv文件下载编程像这样(缩短留下一些检查出像选择了多个对象等)(数据和对象名称事先收集):

public ActionResult ExportCsv(CsvExport Data, string ObjectName, string Type){ 
    var FileName = Type + "_" + ObjectName + "_" + DateTime.Now.ToString("yyyy/MM/dd"); 
    return BinaryContent("text/csv", FileName + ".csv", Data.ExportToBytes()); 

}