[C#] 将DataSet内容导入到Excel (矩阵区域导出)
2007-12-20 09:52
507 查看
/// <summary>
/// 将DataSet内容导入到Excel
/// </summary>
/// <param name="dsExport">DataSet</param>
public static void FACTDataSetToExcel(System.Data.DataSet dsExport,string _fileName)
{
//保存文件名
string FILE_NAME = ""+_fileName+".xls";
//数据DataTable
System.Data.DataTable dt = dsExport.Tables[0];
string _cellStr = string.Empty;
//列名
string strColumnName = string.Empty;
ApplicationClass xlApp = new ApplicationClass();
Workbook wbs = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)wbs.Worksheets[1];
#region 导出Excel保存至服务器目录
if(dt.Rows.Count >0)
{
// 设置列名
for(int head = 0;head<dt.Columns.Count;head++)
{
worksheet.Cells[1,head+1] = dt.Columns[head].ColumnName.ToString();;
Range rg = (Range)worksheet.Cells[1,head+1];
}
try
{
object[,] obj = new object[dt.Rows.Count,dt.Columns.Count];
for(int k=0;k<dt.Rows.Count;k++)
{
for(int l=0;l<dt.Columns.Count;l++)
{
if (dt.Columns[l].ColumnName.Equals("NET PRICE") || dt.Columns[l].ColumnName.Equals("TRACKING NUMBER")|| dt.Columns[l].ColumnName.Equals("SALES ORDER NO.")|| dt.Columns[l].ColumnName.Equals("DELIVERY DATE")|| dt.Columns[l].ColumnName.Equals("EAN/UPC NUMBER"))
{
obj[k,l] = "\'"+ dt.Rows[k][l].ToString();
}
else
{
obj[k,l] = dt.Rows[k][l].ToString();
}
}
}
Range rangeObj = worksheet.get_Range("A2",Missing.Value);
rangeObj = rangeObj.get_Resize(dt.Rows.Count,dt.Columns.Count);
rangeObj.set_Value(Missing.Value,obj);
wbs.Saved = true;
wbs.SaveCopyAs(HttpContext.Current.Server.MapPath(".")+"\\FactReports\\"+FILE_NAME);
}
#region 异常
catch
{
if (xlApp != null)
{
xlApp.Workbooks.Close();
xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null;
System.GC.Collect(generation);
} GC.Collect();//强行销毁 KillProcess();
}
#endregion
finally
{
if (xlApp != null)
{
xlApp.Workbooks.Close(); xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null;
System.GC.Collect(generation);
} GC.Collect();//强行销毁 KillProcess();
}
}
#endregion
else
{
if (xlApp != null)
{
xlApp.Workbooks.Close(); xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null;
System.GC.Collect(generation);
} GC.Collect();//强行销毁 KillProcess();
}
} /// <summary>
/// 强行杀Excel进程
/// </summary>
private static void KillProcess()
{
System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
System.DateTime startTime = new DateTime();
int m, killId = 0;
for (m = 0; m < excelProc.Length; m++)
{
if (startTime < excelProc[m].StartTime)
{
startTime = excelProc[m].StartTime;
killId = m;
}
}
if (excelProc[killId].HasExited == false)
{
excelProc[killId].Kill();
}
}
/// 将DataSet内容导入到Excel
/// </summary>
/// <param name="dsExport">DataSet</param>
public static void FACTDataSetToExcel(System.Data.DataSet dsExport,string _fileName)
{
//保存文件名
string FILE_NAME = ""+_fileName+".xls";
//数据DataTable
System.Data.DataTable dt = dsExport.Tables[0];
string _cellStr = string.Empty;
//列名
string strColumnName = string.Empty;
ApplicationClass xlApp = new ApplicationClass();
Workbook wbs = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)wbs.Worksheets[1];
#region 导出Excel保存至服务器目录
if(dt.Rows.Count >0)
{
// 设置列名
for(int head = 0;head<dt.Columns.Count;head++)
{
worksheet.Cells[1,head+1] = dt.Columns[head].ColumnName.ToString();;
Range rg = (Range)worksheet.Cells[1,head+1];
}
try
{
object[,] obj = new object[dt.Rows.Count,dt.Columns.Count];
for(int k=0;k<dt.Rows.Count;k++)
{
for(int l=0;l<dt.Columns.Count;l++)
{
if (dt.Columns[l].ColumnName.Equals("NET PRICE") || dt.Columns[l].ColumnName.Equals("TRACKING NUMBER")|| dt.Columns[l].ColumnName.Equals("SALES ORDER NO.")|| dt.Columns[l].ColumnName.Equals("DELIVERY DATE")|| dt.Columns[l].ColumnName.Equals("EAN/UPC NUMBER"))
{
obj[k,l] = "\'"+ dt.Rows[k][l].ToString();
}
else
{
obj[k,l] = dt.Rows[k][l].ToString();
}
}
}
Range rangeObj = worksheet.get_Range("A2",Missing.Value);
rangeObj = rangeObj.get_Resize(dt.Rows.Count,dt.Columns.Count);
rangeObj.set_Value(Missing.Value,obj);
wbs.Saved = true;
wbs.SaveCopyAs(HttpContext.Current.Server.MapPath(".")+"\\FactReports\\"+FILE_NAME);
}
#region 异常
catch
{
if (xlApp != null)
{
xlApp.Workbooks.Close();
xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null;
System.GC.Collect(generation);
} GC.Collect();//强行销毁 KillProcess();
}
#endregion
finally
{
if (xlApp != null)
{
xlApp.Workbooks.Close(); xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null;
System.GC.Collect(generation);
} GC.Collect();//强行销毁 KillProcess();
}
}
#endregion
else
{
if (xlApp != null)
{
xlApp.Workbooks.Close(); xlApp.Quit(); int generation = System.GC.GetGeneration(xlApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null;
System.GC.Collect(generation);
} GC.Collect();//强行销毁 KillProcess();
}
} /// <summary>
/// 强行杀Excel进程
/// </summary>
private static void KillProcess()
{
System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
System.DateTime startTime = new DateTime();
int m, killId = 0;
for (m = 0; m < excelProc.Length; m++)
{
if (startTime < excelProc[m].StartTime)
{
startTime = excelProc[m].StartTime;
killId = m;
}
}
if (excelProc[killId].HasExited == false)
{
excelProc[killId].Kill();
}
}
相关文章推荐
- C# DataSet和Excel之间导入导出 (转)
- C# DataSet 导出 导入 Excel
- C#导入Excel到Dataset和导出Excel到DataTable
- C#导入导出Excel数据的两种方法
- C# excel导入导出
- 关于导出excel 把一个dataset的多个datatable导入到一个excel的多个sheet中
- C#操作Excel(导入导出)
- C#导入导出与处理Excel文件
- Excel 导入导出,统计报表(C#)
- DataSet导出到Excel (c#)
- C# 使用NPOI 实现Excel的简单导入导出
- DataSet、Excel、XML之间的导入导出
- C# 从Excel表中导入数据函数到DataSet
- C#将excel数据导入dataset
- ExcelHelper(Excel和C#、asp.net导入导出,通用类)(一)
- C# Excel数据导入和导出简单方案
- 将Excel内容导入数据库(ASP.NET/C#)
- 导出页面指定区域内容到Word/Excel
- 在c#中将dataset输出成xml内容的xls文件,解决其它输出不能在excel中显示“001”的前导0的问题
- C#操作Excel(导入导出)