WPF datagrid转换成Excel
using System;
using System.collections.Generic;
using System.Reflection;
using Excel=Microsoft.Office.interop.Excel;
using System.Data;
using System.Windows;
namespace XXXXXX
{
public calss EcportTo Excel
{
public DataTable DataToPrint;
private Excel.Application _excelApp=null;
private Excel.Workbooks _books=null;
private Excel._workbooks.Workbook _book=null;
private Excel.Sheets _sheets= null;
private Excel._Worksheet _sheet=null;
private Excel.Range _range=null;
private Excel.Font _font=null;
private object _optionalValue=Missing.Value;
public int GenerateReport()
{
int result=1;
try
{
if(DataToprint!=null)
{
if(DataToPrint.Rows.Count!=0)
{
CreateExcelRef();
FillSheet();
OpenReport();
}
}
}
catch(Exception e)
{
result=0;
MessageBox.Show("Excel export error!\n",e.message);
}
finally
{
ReleaseObject(_sheet);
ReleaseObject(_sheets);
ReleaseObject(_book);
ReleaseObject(_books);
ReleaseObject(_excelApp);
}
return result;
}
private void OpenReport()
{
_excelApp.Visible=true;
}
private void FillSheet()
{
object[] header=CreateHeader();
}
private void WriteData()
{
object[,] objData = new object[DataToPrint.Rows.Count,DataToPrint.Columns.Count];
for(int j=0;j<DataToPrint.Rows.Count;j++)
{
DataRow dr=DataToPrint.Rows[j];
for(int i=0;i<DataToPrint.Columns.Count;i++)
{
var y=dr[i];
objData[j,i]=(y==null)?"":y.Tostring();
}
}
AddExcelRows("A2",DataToPrint.Rows.Count,DataToPrint.Columns.Count,objData);
AutoFitColumns("A1',DataToPront.Rows+1,DataToPrint.Columns.Count);
}
private void AutoFitColumns(string strartRang,int rowCount,int colCount)
{
_range=_sheet.get_Range(startRange,_optionalValue);
_range=_range.get_resize(RowCount,colCount);
_range.Columns.AutoFit();
}
private object[] CreateHeader()
{
List<object> objHeaders= new List<object>();
for(int n=0;n<DataToPrint.Columns.Count;n++)
{
objHeaders.Add(DataToPRint.Columns[n].ToString());
}
var headerToAdd=objHeaders.ToArray();
AddExcelRows("A1",1,headerToAdd.Length,headerToAdd);
SetHeaderStyle();
return headerToAdd;
}
private void SetHeaderStyle()
{
_font=_range.Font;
_font.Bold=true;
}
private void AddExcelRows(string startRange,int rowCount,int colCount, object values)
{
_range=_sheet.get_Range(startRang,_optionalValue);
_range=_range.get_Resize(rowCount,colCount);
_range.set_value(_ootionalValue,values);
}
private void CreateExcelRef()
{
_excelApp=new Excel.Application();
_books=(Excel.Workbooks)_excelApp.Workbooks;
_book=(Excel._Workbook)(_books.Add(_optionalValue));
_sheets=(Excel.Sheets)_book.Worksheets;
_sheet=(Excel._Worksheet)(_sheets.get_item(1));
}
private void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj=null;
}
catch(Exceptiop ex)
{
obj=null
}
finally
{
GC.collect90;
}
}
}
}
ASP.net ToExcel
private void ToExcel()
{
Response.Charset="GB2312";
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
string fileName=string.Formate("exprot{0}.xls",DateTime.Now.ToSting("yyyyMMddHHmmss"));
string style=@"<style>.text{mso-number-format:\@;}</script>";
Response.ClearContent();
Response.AddHeader("content-disposition","attachment;filename="+fileName);
Response.ContentType="application/excel";
StringWriter sw=new StringWriter();
HtmlTextWriter htw=new HtmlTextWriter(sw);
this.dgSumData.RenderControl(htw);
Response.Write(style);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}