using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Data.OleDb;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using Ant.Data;
namespace Ant.Service.Utilities
{
//range.NumberFormatLocal = "@"; //设置单元格格式为文本
//range = (Range)worksheet.get_Range("A1", "E1"); //获取Excel多个单元格区域:本例做为Excel表头
//range.Merge(0); //单元格合并动作
//worksheet.Cells[1, 1] = "Excel单元格赋值"; //Excel单元格赋值
//range.Font.Size = 15; //设置字体大小
//range.Font.Underline=true; //设置字体是否有下划线
//range.Font.Name="黑体"; 设置字体的种类
//range.HorizontalAlignment=XlHAlign.xlHAlignCenter; //设置字体在单元格内的对其方式
//range.ColumnWidth=15; //设置单元格的宽度
//range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb(); //设置单元格的背景色
//range.Borders.LineStyle=1; //设置单元格边框的粗细
//range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb()); //给单元格加边框
//range.EntireColumn.AutoFit(); //自动调整列宽
//Range.HorizontalAlignment= xlCenter; // 文本水平居中方式
//Range.VerticalAlignment= xlCenter //文本垂直居中方式
//Range.WrapText=true; //文本自动换行
//Range.Interior.ColorIndex=39; //填充颜色为淡紫色
//Range.Font.Color=clBlue; //字体颜色
//xlsApp.DisplayAlerts=false; //保存Excel的时候,不弹出是否保存的窗口直接进行保存
// workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字
//http://www.360doc.com/content/07/0824/10/12027_691547.shtml
class ExcelHelp
{
///
/// 根据excel路径和sheet名称,返回excel的DataTable
///
public static DataTable GetExcelDataTable(string path, string tname)
{
/*Office 2007*/
string ace = "Microsoft.ACE.OLEDB.12.0";
/*Office 97 - 2003*/
string jet = "Microsoft.Jet.OLEDB.4.0";
string xl2007 = "Excel 12.0 Xml";
string xl2003 = "Excel 8.0";
string imex = "IMEX=1";
/* csv */
string text = "text";
string fmt = "FMT=Delimited";
string hdr = "Yes";
string conn = "Provider={0};Data Source={1};Extended Properties=\"{2};HDR={3};{4}\";";
string select = string.Format("SELECT * FROM [{0}$]", tname);
//string select = sql;
string ext = Path.GetExtension(path);
OleDbDataAdapter oda;
DataTable dt = new DataTable("data");
switch (ext.ToLower())
{
case ".xlsx":
conn = String.Format(conn, ace, Path.GetFullPath(path), xl2007, hdr, imex);
break;
case ".xls":
conn = String.Format(conn, jet, Path.GetFullPath(path), xl2003, hdr, imex);
break;
case ".csv":
conn = String.Format(conn, jet, Path.GetDirectoryName(path), text, hdr, fmt);
//sheet = Path.GetFileName(path);
break;
default:
throw new Exception("File Not Supported!");
}
OleDbConnection con = new OleDbConnection(conn);
con.Open();
//select = string.Format(select, sql);
oda = new OleDbDataAdapter(select, con);
oda.Fill(dt);
con.Close();
return dt;
}
///
/// 保存excel文件,覆盖相同文件名的文件
///
public static bool SaveExcel(string SheetName, DataTable dt, ExcelPackage package)
{
try
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add(SheetName);
ws.Cells["A1"].LoadFromDataTable(dt, true);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 多个表格导出到一个excel工作簿
///
public static void export(IList SheetNames, string filename, DataAccess db, IList sqls)
{
DataTable dt = new DataTable(); string strsql = "";
FileInfo newFile = new FileInfo(filename);
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(filename);
}
using (ExcelPackage package = new ExcelPackage(newFile))
{
for (int i = 0; i < sqls.Count; i++)
{
dt = db.ExecuteDataTable(sqls[i]);
SaveExcel(SheetNames[i], dt, package);
}
package.Save();
}
}
///
/// 单个表格导出到一个excel工作簿
///
public static void export(string SheetName, string filename, DataAccess db, string sql)
{
DataTable dt = new DataTable();
FileInfo newFile = new FileInfo(filename);
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(filename);
}
using (ExcelPackage package = new ExcelPackage(newFile))
{
dt = db.ExecuteDataTable(sql);
SaveExcel(SheetName, dt, package);
package.Save();
}
}
///
/// 单个表导出到多个excel工作簿(分页)
///
public static void export(string SheetName, string filename, DataAccess db, string sql, int num, int pagesize)
{
DataTable dt = new DataTable();
FileInfo newFile = new FileInfo(filename);
int numtb = num / pagesize + 1;
for (int i = 1; i <= numtb; i++)
{
string s = filename.Substring(0, filename.LastIndexOf("."));
StringBuilder newfileName = new StringBuilder(s);
newfileName.Append(i + ".xlsx");
newFile = new FileInfo(newfileName.ToString());
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(newfileName.ToString());
}
using (ExcelPackage package = new ExcelPackage(newFile))
{
dt = db.ExecuteDataTable(sql, pagesize * (i - 1), pagesize);
SaveExcel(SheetName, dt, package);
package.Save();
}
}
}
}
}