我做的C#前端(winfor),在报表数据输出到Excel中大致分为两种方式:
一种方式是把数据传输给后台,让后台制作成Excel文件之后返回给前端然后保存到客户的电脑上(速度秒级);
还有一种方式是前端通过office或者wps插件将数据制作成Excel文件保存到客户端上(其中又分三种制作方法,
1:一种是一格一格的对应数据填入Excel表格中(速度很慢);
2:一种是以行为单位填入Excel表格中(比较快);
3:最后一种是批量把数据组合成二维数组一次性填入Excel表格中(非常快))。
一、借用后台的方式(简单讲):
一般后台会以字符串(string)类型返回Excel文件(假设是reportData);
如果文件是压缩的则解压:reportData = StringConvert.unCompress(reportData);
得到Excel文件之后调用FolderBrowserDialog将文件输出到指定位置:
FolderBrowserDialog frm = new FolderBrowserDialog();
if (frm.ShowDialog() == DialogResult.OK)
{
try
{
string resName = "test";
string path = frm.SelectedPath + "\\" + resName + ".xls";
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
byte[] data = JsonConvertor.DeserializeObject
fs.Write(data, 0, data.Length);
fs.Flush();
fs.Close();
ModuleBaseUserControl.ShowInfomation("导出完毕!路径:" + path);
}
catch (Exception ex)
{
ModuleBaseUserControl.ShowError(ex.Message);
}
}
(后台的方法这里不做详细说明,只说C#前端的方法)。
二、C#前端
第一和第二种方法我就不说了,百度一下都能搜索到,第三中百度也能找到,个人觉得不够好,所以在此整理讲解一下。
假设现在我要导出SourceGrid数据到Excel表格中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SCFBaseLib;
using TYYW.AGTJ.Common;
using System.Drawing;
using System.Reflection;
using Microsoft.Office.Interop.Excel;
//以上是所需要的引用
#region 导出SourceGrid数据(最新版,批量快速输出)
///
/// 导出SourceGrid数据
///
/// SourceGrid
/// 需要导出的行
/// 需要导出的列
//Excel导出的时候有两种软件插件可以使用(一种是office一种wps),因为各个插件的dll使用的方法不一样,因此要判断用户安装了哪个软件。
public static void NewExportSourceGridCell(SourceGrid.Grid grid, List
{
//个人做的是政府项目,讲究国产化,在这里我先判断用户是否安装了wps。
string excelType = "wps";
Type type;
type = Type.GetTypeFromProgID("ET.Application");//V8版本类型
if (type == null)//没有安装V8版本
{
type = Type.GetTypeFromProgID("Ket.Application");//V9版本类型
if (type == null)//没有安装V9版本
{
type = Type.GetTypeFromProgID("Kwps.Application");//V10版本类型
if (type == null)//没有安装V10版本
{
type = Type.GetTypeFromProgID("EXCEL.Application");//MS EXCEL类型
excelType = "office";
if (type == null)
{
ModuleBaseUserControl.ShowError("检测到您的电脑上没有安装office或WSP软件,请先安装!");
return;//没有安装Office软件
}
}
}
}
if (excelType == "wps")
{
WpsExcel(type, grid, rowsStr, colsStr);
}
else
{
OfficeExcel(type, grid, rowsStr, colsStr);
}
}
//安装了wps
最后说明:需要注意的是在此引用了wps的 Kingsoft ET 2.0 Object Library(WPS需要用到 ET.dll 和 KSO.dll),在电脑中下载了wsp之后在引用的COM中引用。我的开发环境中在其它地方用到Microsoft.Office.Interop.Excel.dll,因此在声明Excel的时候默认是office的,WPS需要加上ET引用。