web开发:
条件:
1.一个xml模板
2.一个.xsl模板文件
3.一个数据集合
结果
4.将数据集合按照.XML文件的要求写到.XSL文件里面
写代码的时候首先的从服务器端下载xml与excel文件,然后得到数据集合,生成数据写到.EXCEL
文件里面。
这样做的好处:
由于.xsl模板文件已经存在,里面一些数据格式可以直接在模板文件里面进行定义,这样
的话,很多样式可以很简单的在模板文件里面进行实现。比如之前的输出的数据格式00001到
excel里面是1。
源码:
public class ExportExcel : INotifyPropertyChanged
{
#region 导出Excel
private ExcelApp _excel;
public void Export(string xls, string xml, Dictionary<string, object> Collects)
{
if (!Application.Current.IsRunningOutOfBrowser)
{
DialogHelper.AlertDialog("此功能需要在OOB模式下运行.", "提示");
return;
}
ObservableCollection<string> lst = new ObservableCollection<string>();
lst.Add("Upload\\" + xls); //标签文件
lst.Add("Upload\\" + xml); //模板文件
InnerHelper.ProjectTotalizeProxy.GetStreamArrayByFiles(lst, null,
(s, args) =>
{
if (args.Error != null)
{
WaitingDialogHelper.Close();
DialogHelper.AlertDialog(args.Error.Message, "操作提示");
return;
}
if (args.Cancelled == true) return;
ObservableCollection<byte[]> LstStream = (ObservableCollection<byte[]>)args.Result;
MemoryStream tplExcel = new MemoryStream(LstStream[0]); //模板文件流
MemoryStream msxml = new MemoryStream(LstStream[1]); //标签文件流
#region 获取我的文档地址
string tempFloder = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "BaffinWorking");
if (System.IO.Directory.Exists(tempFloder) != true)
System.IO.Directory.CreateDirectory(tempFloder);
var _sevefilename = tempFloder + "\\" + xls;
#endregion
_excel = ExcelApp.Generate(_sevefilename, msxml, Encoding.UTF8, tplExcel, Collects, XlWindowState.xlMaximized);
_excel.AfterClose += new EventHandler<EventArgs>(Excel_AfterClose);
WaitingDialogHelper.Close();
}
);
}
private void Excel_AfterClose(object sender, EventArgs e)
{
_excel = null;
}
#endregion
#region 其他
public event PropertyChangedEventHandler PropertyChanged;
public void OnPerprotyChange(string propertyName)
{
if (this.PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}