当前位置:文档之家› C#保存数据到excel方法,直接调用即可,注释详细

C#保存数据到excel方法,直接调用即可,注释详细

using System;
using System.Collections.Generic;
using System.Text;
//引入命名空间
using Microsoft.Office.Interop.Excel;
using System.Data;
using System.Diagnostics;


namespace FinancingSystem
{
public class SaveToExcel
{
///


/// 保存信息到Excel中
///

/// 保存在Datatable中的数据对象
/// 想要保存为的文件名
/// 保存路径
/// excel表中表头显示内容
/// 每列显示的内容名数组
public static string SaveExcel(System.Data.DataTable table,string name,string saveWay,string tableHead,string[] title)
{
string message = "";

ApplicationClass xlsApp = new ApplicationClass(); // 1. 创建Excel应用程序对象的一个实例,相当于我们从开始菜单打开Excel应用程序。
if (xlsApp == null)
{
message = "您没有安装Microsoft Offic Excel2007,请安装后再次使用!";
return message;
}



//创建Excel对象
Microsoft.Office.Interop.Excel.Application objExcel = new Microsoft.Office.Interop.Excel.Application();
//Excel显示出来 (创建Excel后是隐藏的)
//objExcel.Visible = true;

Object missing = System.Reflection.Missing.Value; //定义缺省值

//创建一个新的工作薄,并引用缺省的工作表 创建Excel后不会自动创建新的工作薄(文件)
Workbook objBook = objExcel.Workbooks.Add(missing);

Worksheet objSheet = (Worksheet)objBook.Worksheets.get_Item(1);

//添加数据到工作表4个单元格中

//Range对象用于选择一个或多个单元格

Range objRange;


string last=ToName(table.Columns.Count-1);
//开始行
int stateRow=3;

if (table.Rows.Count == 0)
message = "没有数据传入,无需保存!";
else
{

objRange = objSheet.get_Range("A1", last+"1");
//合并单元格
objRange.Merge(0);
objRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;
objRange = objSheet.get_Range("A1", missing);
objRange.Value2 = tableHead;
objRange.Font.Size = 20;
objRange.Font.Bold = true;


//循环放入列名
int titleIndex = 1;
for (int i = 0; i < title.Length; i++)
{
objSheet.Cells[(stateRow - 1), titleIndex++] = Convert.ToString(title[i]);
}


//循环放入所

有数据
int iRow = stateRow;
foreach (DataRow dr in table.Rows)
{
int icel = 1;//列号
for (int iCol = 0; iCol < table.Columns.Count; iCol++)
{
//向单元格中插入数据
objSheet.Cells[iRow, icel++] = Convert.ToString(dr[iCol].ToString());

}

iRow++;
}

objRange = objSheet.get_Range("a2", last+"2");
objRange.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 204, 153).ToArgb();

objRange = objSheet.get_Range("a2", last+ iRow.ToString());//选中所有表格
objRange .EntireColumn.AutoFit(); //自动调整表格大小
objRange.HorizontalAlignment = XlHAlign.xlHAlignLeft;//将所有单元格左对齐

//在表格底部添加时间
objRange = objSheet.get_Range("a" + (iRow+1).ToString(),last+(iRow+1).ToString());//选中单元格
objRange.Merge(0);//合并
objRange.Value2 = DateTime.Now.ToString();//把时间赋值给单元格
objRange.HorizontalAlignment = XlHAlign.xlHAlignRight;//右对齐
objRange.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();


}

objBook.Saved = true;//保存表格
DateTime dtime = DateTime.Now;//获取当前时间

string fileName = dtime.ToString("yyyy-MM-dd hh-mm")+".xlsx";
string fileWay = saveWay + "\\" +name+ fileName;//得到完整的文件路径
objBook.SaveCopyAs(fileWay);//将表格拷贝到指定路径
objBook.Close(true, Type.Missing, Type.Missing);//关闭表格
objExcel = null;//清空Excel
xlsApp.Quit();//释放资源
xlsApp = null;
KillProcess("Excel");//关闭进程
message = "已将信息保存到“" + saveWay + "”文件夹下";
return message;
}



///


/// 关闭excel
///

///
private static void KillProcess(string processName)
{
System.Diagnostics.Process myproc = new System.Diagnostics.Process();
//得到所有打开的进程
try
{
foreach (Process thisproc in Process.GetProcessesByName(processName))
{
if (!thisproc.CloseMainWindow())
{
thisproc.Kill();
}
}
}
catch (Exception Exc)
{
throw new Exception("", Exc);
}
}

/

//


/// 将数字转换成字母
///

///
///
public static string ToName(int index)
{
if (index < 0) { throw new Exception("invalid parameter"); }

List chars = new List();
do
{
if (chars.Count > 0) index--;
chars.Insert(0, ((char)(index % 26 + (int)'A')).ToString());
index = (int)((index - index % 26) / 26);
} while (index > 0);

return String.Join(string.Empty, chars.ToArray());
}

}
}

相关主题
文本预览
相关文档 最新文档