C#:将DataTable里的内容极速写入到EXCEL中并保存

 

/// <summary>
/// 将DataTable里面的内容,写到EXCEL,极速写入。
/// </summary>
/// <param name="DTs">DataTable们</param>
/// <param name="SheetNames">Sheet的命名</param>
/// <param name="FileName">保存的文件名</param>
/// <returns></returns>
private bool DataTable2Excel(DataTable[] DTs,string[] SheetNames,string FileName)
{
	if (DTs.Length != SheetNames.Length)
	{
		return false;
	}

	Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
	if (xlApp == null)
	{
		SetHint("可能机器未安装Excel!", HintType.Error);
		return false;
	}

	Microsoft.Office.Interop.Excel.Workbooks xlBooks = xlApp.Workbooks;
	Microsoft.Office.Interop.Excel.Workbook xlBook = xlBooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
	//增加Sheet
	for (int iSht = 1; iSht < DTs.Length; iSht++)
	{
		xlBook.Sheets.Add();
	}

	xlApp.Visible = true;

	for (int iArr = 0; iArr < DTs.Length; iArr++)
	{
		Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[iArr+1];
		//数据写数组
		object[,] objData = new object[DTs[iArr].Rows.Count + 1, DTs[iArr].Columns.Count];
		//--ColumnName
		for (int iDT = 0; iDT < DTs[iArr].Columns.Count; iDT++)
		{
			objData[0, iDT] = DTs[iArr].Columns[iDT].ColumnName;
		}
		//--Data
		for (int iRow = 0; iRow < DTs[iArr].Rows.Count; iRow++)
		{
			for (int iColumn = 0; iColumn < DTs[iArr].Columns.Count; iColumn++)
			{
				objData[iRow + 1, iColumn] = DTs[iArr].Rows[iRow][iColumn];
			}
		}

		//Excel Column Name
		string startCol = "A";
		int iCnt = (DTs[iArr].Columns.Count / 26);
		string endColSignal = (iCnt == 0 ? "" : ((char)('A' + (iCnt - 1))).ToString());
		string endCol = endColSignal + ((char)('A' + DTs[iArr].Columns.Count - iCnt * 26 - 1)).ToString();

		Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range(
			startCol + "1", endCol + (DTs[iArr].Rows.Count - iCnt * 26 + 1).ToString()
			);
		range.NumberFormatLocal = "@";
		range.Value = objData;
		range.EntireColumn.AutoFit(); //设定Excel列宽度自适应  
		//Excel文件列名 字体设定为Bold  
		xlSheet.get_Range(startCol + "1", endCol + "1").Font.Bold = 1;
		xlSheet.Name = SheetNames[iArr];
	}

	xlApp.DisplayAlerts = false;
	xlApp.AlertBeforeOverwriting = false;
	xlBook.SaveAs(FileName);
	xlApp.Quit();

	return true;
}

调用

string sql = "Select * from Table1";
DataTable dt = sdh.getDataSet(sql).Tables[0];
sql = "Select * from Table2";
DataTable dt2 = sdh.getDataSet(sql).Tables[0];
DataTable2Excel(new DataTable[] { dt, dt2 }, new string[] { "Sheet1", "Sheet2"},"C:\aaa.xlsx");

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值