赞
踩
使用到 Aspose.Cells 插件,整理一下。
目录说明:
Program.cs - 入口类
ExcelGenerator.cs - Aspose.Cells 操作类
Aspose.Cell.dll - 基础dll【文件见文章底部源代码内】
License.lic - Aspose.Cells 破解证书【文件见文章底部源代码内】
ps:由于 Aspose.Cells 插件 是收费插件,需要在使用插件前,设置一下许可证,否则在生成的Excel 中 会出现一个名叫 Evaluation Warning 的 Sheet.如图所示:
Excel.License l = new Excel.License(); l.SetLicense("Aid/License.lic");
//模板文件路径 string Template_File_Path = @".\Template\Template.xlsx"; // 打开 Excel 模板 Workbook CurrentWorkbook = File.Exists(Template_File_Path) ? new Workbook(Template_File_Path) : new Workbook(); // 打开第一个sheet Worksheet DetailSheet = CurrentWorkbook.Worksheets[0];
// 比如要在 A1 位置写入 Demo这个值 Cell itemCell = DetailSheet.Cells["A1"]; itemCell.PutValue("Demo");
// 获取 Table 数据 DataTable dt = GetData(); // 写入数据的起始位置 string cell_start_region = "C1"; // 获得开始位置的行号 int startRow = DetailSheet.Cells[cell_start_region].Row; // 获得开始位置的列号 int startColumn = DetailSheet.Cells[cell_start_region].Column; // 写入Excel。参数说明,直接查阅文章底部文档链接 DetailSheet.Cells.ImportDataTable(dt, false, startRow, startColumn, true, true);
// 设置执行公式计算 - 如果代码中用到公式,需要设置计算公式,导出的报表中,公式才会自动计算 CurrentWorkbook.CalculateFormula(true); // 生成的文件名称 string ReportFileName = string.Format("Excel_{0}.xlsx", DateTime.Now.ToString("yyyy-MM-dd")); // 保存文件 CurrentWorkbook.Save(@".\Excel\" + ReportFileName, SaveFormat.Xlsx);
/新建工作簿
Workbook workbook = new Workbook(); //工作簿
Worksheet sheet = workbook.Worksheets[0]; //工作表
Cells cells = sheet.Cells;//单元格
sheet.Protect(ProtectionType.All, "123123", "");//保护工作表
sheet.Protection.IsSelectingLockedCellsAllowed = false;//设置只能选择解锁单元格
sheet.Protection.IsFormattingColumnsAllowed = true;//设置可以调整列
sheet.Protection.IsFormattingRowsAllowed = true;//设置可以调整行
Style style1 = workbook.Styles[workbook.Styles.Add()];//新增样式
style1.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style1.Font.Name = "宋体";//文字字体
style1.Font.Size = 22;//文字大小
style1.IsLocked = false;//单元格解锁
style1.Font.IsBold = true;//粗体
style1.ForegroundColor = Color.FromArgb(0xaa, 0xcc, 0xbb);//设置背景色
style1.Pattern = BackgroundType.Solid; //设置背景样式
style1.IsTextWrapped = true;//单元格内容自动换行
style1.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //应用边界线 左边界线
style1.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线
style1.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //应用边界线 上边界线
style1.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //应用边界线 下边界线
cells.Merge(0, 0, 1, 5);//合并单元格
cells[0, 0].PutValue("内容");//填写内容
cells[0, 0].SetStyle(style1);//给单元格关联样式
cells.SetRowHeight(0, 20);//设置行高
cells.SetColumnWidth(1, 30);//设置列宽
cells[1, 0].Formula = "=AVERAGE(B1:E1)";//给单元格设置计算公式
//从Cells[0,0]开始创建一个2行3列的Range
Range range = ws.Cells.CreateRange(0, 0, 2, 3);
Cell cell = range[0, 0];
cell.Style.Font = 9;
range.Style = style;
range.Merge();
注意Range不能直接设置Style.必须先定义style再将style赋给Style.其他设置和Cell基本一致.
Range的Style会覆盖Cell定义的Style.另外必须先赋值再传Style.否则可能不生效.
sheet.Cells[0,0].PutValue(1);
sheet.Cells[1,0].PutValue(20);
sheet.Cells[2,0].Formula="SUM(A1:B1)";
sheet.CalculateFormula(true);
Save Excel文件的时候必须调用CalculateFormula方法计算结果.
//********************************************************************************
1.创建execl(不需要服务器或者客户端安装office)
public void DCExexl(DataTable dt)
{
Workbook wb = new Workbook();
Worksheet ws = wb.Worksheets[0];
Cells cell = ws.Cells;
cell[0, 0].PutValue("ID");//添加数据到第0行和第0列
cell.SetRowHeight(0, 0);设置行高
Aspose.Cells.Style style1 = wb.Styles[wb.Styles.Add()];
style1.HorizontalAlignment = TextAlignmentType.Right;//文字居中
style1.Font.Name = "宋体";
style1.Font.IsBold = true;//设置粗体
style1.Font.Size = 12;//设置字体大小
cell[0, 0].SetStyle(style1);
cell.SetColumnWidth(0, 10.00);//列宽
Range range = cell.CreateRange(0, 0, 1, 1);//合并单元格
range.Merge();
string FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
HttpResponse response = Page.Response;
response.Buffer = true;
response.Charset = "utf-8";
response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
response.ContentEncoding = System.Text.Encoding.UTF8;
response.ContentType = "application/ms-excel";
response.BinaryWrite(wb.SaveToStream().ToArray());
response.End();
}
2.读取execl
public DataTable GetDataTable(string path)
{
Workbook workbook = new Workbook();
workbook.Open(path);
Cells cells = workbook.Worksheets[0].Cells;
DataTable dt = new DataTable();
bool d = true;//防止表头重复加载
for (int i = 0; i < cells.MaxDataRow + 1; i++)
{
DataRow row = dt.NewRow();
for (int j = 0; j < cells.MaxDataColumn + 1; j++)
{
if (d) {
dt.Columns.Add(cells[0, j].StringValue.Trim());
}
row[j] = cells[i + 1, j].StringValue.Trim();
}
dt.Rows.Add(row);
d = false;
}
return dt;
}
//*******************************************************************************
读Excel
- Aspose.Cells.Workbook wk = new Aspose.Cells.Workbook();
- wk.Open(file);//打开Excel文档
- Worksheet sht = wk.Worksheets[0];//查看文档的sheet0内容
- Cells cells = sht.Cells;//获取sheet0的所有单元格
- if (sht==null)
- {
- return false;
- }
- int rowCount = cells.MaxDataRow+1;//当Excel没有一行数据时,读取到的cells.MaxDataRow=-1,当有一行数据时cells.MaxDataRow=0 MaxDataRow:包含数据的单元格的最大行索引
-
- int cellCount = cells.MaxDataColumn + 1;//当Excel没有一行数据时,读取到的cells.MaxDataRow=-1,当有一行数据时cells.MaxDataRow=0 MaxDataRow:包含数据的单元格的最大列索引
- string title = cells[j, k].Value.ToString();//获取第j行k列单元格的内容
- Aspose.Cells.Workbook wk = new Aspose.Cells.Workbook();
- wk.Open(file);//打开Excel文档
- Worksheet sht = wk.Worksheets[0];//查看文档的sheet0内容
- Cells cells = sht.Cells;//获取sheet0的所有单元格
- if (sht==null)
- {
- return false;
- }
- int rowCount = cells.MaxDataRow+1;//当Excel没有一行数据时,读取到的cells.MaxDataRow=-1,当有一行数据时cells.MaxDataRow=0 MaxDataRow:包含数据的单元格的最大行索引
-
- int cellCount = cells.MaxDataColumn + 1;//当Excel没有一行数据时,读取到的cells.MaxDataRow=-1,当有一行数据时cells.MaxDataRow=0 MaxDataRow:包含数据的单元格的最大列索引
- string title = cells[j, k].Value.ToString();//获取第j行k列单元格的内容
写Excel
- int _BugNoColumn = cells.MaxDataColumn+1;;//获取最后单元格的内容
- cells.InsertColumn(_BugNoColumn);//在最后单元格的后一列插入一列
- Cell cell = cells[0, _BugNoColumn];//获取插入的那一列的第一行的单元格
- cell.PutValue("abc");//设置单元格的内容为"abc"
//******************************************************************************************
上传
Workbook Workbook workBook = new Workbook();
属性:
名称 值类型 说明 Colors Color[] 获取或设置Excel颜色 ConvertNumericData bool 获取或设置是否将字符串转换至数字数据
默认值为 true DataSorter DataSorter 获取或设置数据分级 Date1904 bool DefaultStyle Aspose.Cells.Style 获取或设置工作簿默认样式 HasMacro bool 获取工作簿是否包含宏观调控或宏 IsHScrollBarVisible bool 获取或设置左部滚动条(控制行)
默认值为true IsProtected bool 获取工作簿保护状态 IsVScrollBarVisible bool 获取或设置底部滚动条(控制列)
默认值为true Language CountryCode --枚举类型 获取或设置语言
默认为当前计算机区域 Password string 获取或设置工作簿密码 ReCalcOnOpen bool 获取或设置是否重新计算所有打开文件的公式 Region CountryCode --枚举类型 获取或设置工作簿区域(指当前使用者区域)
默认为当前计算机区域 Shared bool 获取或设置当前工作簿是否共享
默认为false ShowTabs bool 获取或设置是否显示标签(工作表标签)
默认为true Styles Styles 样式集合 Worksheets Worksheet
事件:
CalculateFormula(bool ignoreError
,ICustomFunction customFunction) +3 void 计算公式 ChangePalette(Color color,int index) void 设置当前颜色在调色版中显示顺序 Combine(Workbook secondWorkbook) void 联合工作簿,将secondWorkbook 工作簿中workSheet追加到当前工作簿中 Copy(Workbook source) void 拷贝工作簿到当前工作簿 Decrypt(string password) void 解除工作簿密码 IsColorInPalette(Color color) bool 将color加入到当前Excel调色版 LoadData(string fileName)
LoadData(System.IO.Stream stream) void 加载Excel到当前Workbook中 Open(string fileName,
FileFormatType.Default,
string password ); +8 void 打开Excel文件 Protect(ProtectionType.All,
string password); void 写保护,并设置取消工作簿保护密码 RemoveExternalLinks() void 移除外部链接 RemoveMacro() void 移除宏 Replace (string PlaceHolder,
string newValue); +8 void 工作簿中类型和值完全符合的单元格,将其替换为新值或对象 Save(Server.UrlEncode("测试.xls"),
FileFormatType.Default,
SaveType.OpenInExcel, Response);+8 Void 保存工作簿 SaveToStream() System.
将工作簿写入内存流中 Unprotect(string password); Void 取消工作簿保护状态 ValidateFormula(string formula) bool 验证公式
-----------
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Aspose.Cells;
- using System.Data;
-
- namespace CRM.Common
- {
- public class AsposeExcel
- {
- private string outFileName = "";
- private Workbook book = null;
- private Worksheet sheet = null;
- private log4net.ILog log = log4net.LogManager.GetLogger(typeof(AsposeExcel));
-
- public AsposeExcel(string outfilename,string tempfilename)
- {
- outFileName = outfilename;
- book = new Workbook();
- book.Open(tempfilename);
- sheet = book.Worksheets[0];
- }
-
- private void AddTitle(string title, int columnCount)
- {
- sheet.Cells.Merge(0, 0, 1, columnCount);
- sheet.Cells.Merge(1, 0, 1, columnCount);
-
- Cell cell1 = sheet.Cells[0, 0];
- cell1.PutValue(title);
- cell1.Style.HorizontalAlignment = TextAlignmentType.Center;
- cell1.Style.Font.Name = "黑体";
- cell1.Style.Font.Size = 14;
- cell1.Style.Font.IsBold = true;
-
- Cell cell2 = sheet.Cells[1, 0];
- cell1.PutValue("查询时间:" + DateTime.Now.ToLocalTime());
- cell2.SetStyle(cell1.Style);
- }
-
- private void AddHeader(DataTable dt)
- {
- Cell cell = null;
- for (int col = 0; col < dt.Columns.Count; col++)
- {
- cell = sheet.Cells[0, col];
- cell.PutValue(dt.Columns[col].ColumnName);
- cell.Style.Font.IsBold = true;
- }
- }
-
- private void AddBody(DataTable dt)
- {
- for (int r = 0; r < dt.Rows.Count; r++)
- {
- for (int c = 0; c < dt.Columns.Count; c++)
- {
- sheet.Cells[r + 3, c].PutValue(dt.Rows[r][c].ToString());
- }
- }
- }
-
- public void DatatableToExcel(DataTable dt)
- {
- try
- {
- //sheet.Name = sheetName;
-
- //AddTitle(title, dt.Columns.Count);
- //AddHeader(dt);
- AddBody(dt);
-
- sheet.AutoFitColumns();
- //sheet.AutoFitRows();
-
- book.Save(outFileName);
- }
- catch (Exception e)
- {
- log.Error("导出Excel失败!" + e.Message);
- throw e;
- }
- }
- }
- }
-
-
导入就不说了。导入为datetable之后就自己操作就OK。
//********************************************************************************
步骤:
1.WorkBookBase 继承自Aspose.Cells.Workbook,在WorkBookBase 中注册
2.使用WorkBookBase 操作Excel
/// <summary>
/// 创建workBook许可
/// </summary>
/// <author>wxl</author>
/// <date>2012-10-15</date>
public class WorkBookBase : Aspose.Cells.Workbook
{
public WorkBookBase()
{
Aspose.Cells.License license = new Aspose.Cells.License();
string strLic = @"<License>
<Data>
<SerialNumber>aed83727-21cc-4a91-bea4-2607bf991c21</SerialNumber>
<EditionType>Enterprise</EditionType>
<Products>