Aspose.Cells 를 이용 하여 만능 도 출 기능 을 실현 하 다
6852 단어 Aspose.Cells도 출
Excel 을 내 보 내 는 것 은 데 이 터 를 꺼 낸 다음 에 Aspose.Cells 플러그 인 을 이용 하여 Excel 파일 에 채 우 는 것 입 니 다.DataTable 형식의 데 이 터 는 Excel 을 채 우 는 데 가장 적합 합 니 다.유일한 문 제 는 DataTable 데이터 의 열 두 는 보통 영어 입 니 다.갑자기 SQL Server 의 각 열 설명 을 이용 하여 영어 열 두 를 교체 하 는 방법 이 생각 났 습 니 다.저 는 너무 지혜 롭 습 니 다.
/// <summary>
///
/// </summary>
/// <param name="dt"> </param>
/// <param name="dic"> , </param>
/// <param name="title"> </param>
/// <returns></returns>
public Workbook ExportData(DataTable table, Dictionary<string, string> dic, string title = "")
{
title = string.IsNullOrEmpty(title) ? " " : title;
Workbook workbook = new Workbook();
workbook.Worksheets.RemoveAt(0);// sheet
var tempStrArray = System.Activator.CreateInstance<T>().GetType().FullName.Split('.');//
string tableName = tempStrArray[tempStrArray.Count() - 1];// ,
var baseDic = GetColumnsByTable(tableName, "");
foreach (DataColumn item in table.Columns)
{
string chsColumnName = "";
if (baseDic.TryGetValue(item.ColumnName, out chsColumnName) && !string.IsNullOrEmpty(chsColumnName))
item.ColumnName = chsColumnName;
if (dic.TryGetValue(item.ColumnName, out chsColumnName) && !string.IsNullOrEmpty(chsColumnName))
item.ColumnName = chsColumnName;
}
int Colnum = table.Columns.Count;//
int Rownum = table.Rows.Count;//
Worksheet sheet = workbook.Worksheets.Add(title);
Cells cells = sheet.Cells;//
//
Style styleTitle = workbook.Styles[workbook.Styles.Add()];//
styleTitle.HorizontalAlignment = TextAlignmentType.Center;//
styleTitle.Font.Name = " ";//
styleTitle.Font.Size = 18;//
styleTitle.Font.IsBold = true;//
// 2
Style style2 = workbook.Styles[workbook.Styles.Add()];//
style2.HorizontalAlignment = TextAlignmentType.Center;//
style2.Font.Name = " ";//
style2.Font.Size = 13;//
style2.Font.IsBold = true;//
style2.IsTextWrapped = true;//
style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
// 3
Style style3 = workbook.Styles[workbook.Styles.Add()];//
style3.HorizontalAlignment = TextAlignmentType.Center;//
style3.Font.Name = " ";//
style3.Font.Size = 12;//
style3.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
// 1
cells.Merge(0, 0, 1, Colnum);//
cells[0, 0].PutValue(title);//
cells[0, 0].SetStyle(styleTitle);
cells.SetRowHeight(0, 38);
// 2
for (int i = 0; i < Colnum; i++)
{
cells[1, i].PutValue(table.Columns[i].ColumnName);
cells[1, i].SetStyle(style2);
cells.SetRowHeight(1, 25);
cells.SetColumnWidth(i, 30);
}
//
for (int i = 0; i < Rownum; i++)
{
for (int k = 0; k < Colnum; k++)
{
cells[2 + i, k].PutValue(table.Rows[i][k].ToString());
if (k == Colnum - 1)
{
style3.HorizontalAlignment = TextAlignmentType.Left;//
}
else
{
style3.HorizontalAlignment = TextAlignmentType.Center;//
}
cells[2 + i, k].SetStyle(style3);
}
cells.SetRowHeight(2 + i, 24);
}
return workbook;
}
/// <summary>
///
/// </summary>
/// <param name="tbname"> </param>
/// <param name="orderrule"> </param>
/// <returns></returns>
public Dictionary<string, string> GetColumnsByTable(string tbname, string orderrule)
{
StringBuilder sqlsb = new StringBuilder();
sqlsb.Append("SELECT distinct ColumnsName = c.name,Description = isnull(ex.value,'') ");
sqlsb.Append("FROM sys.columns c LEFT OUTER JOIN sys.extended_properties ex ");
sqlsb.Append("ON ex.major_id = c.object_id AND ex.minor_id = c.column_id AND ex.name = 'MS_Description' ");
sqlsb.Append("left outer join systypes t on c.system_type_id=t.xtype ");
sqlsb.Append("WHERE OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0 AND ");
sqlsb.Append("OBJECT_NAME(c.object_id) ='{0}' ");
if (!string.IsNullOrEmpty(orderrule))
{
sqlsb.Append("order by ColumnsName {1}");
}
else
{
sqlsb.Append("order by ColumnsName ASC");
}
string exsql = string.Format(sqlsb.ToString(), tbname, orderrule);
DataTable dt = DB.FromSql(exsql).ToTable() as DataTable;// MySoft QAQ
Dictionary<string, string> dic = new Dictionary<string, string>();
if (dt != null && dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
dic.Add(dt.Rows[i][0].ToString(), dt.Rows[i][1].ToString());
}
}
return dic;
}
두 개가 해결 되면 대부분의 도 출 업 무 를 실현 할 수 있다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Aspose.Cells 를 이용 하여 만능 도 출 기능 을 실현 하 다최근 에 프로젝트 를 했 습 니 다.고객 들 은 엑셀 내 보 내기 기능 에 대해 특별한 관심 을 가지 고 있 습 니 다.거의 모든 목록 데이터 에 엑셀 내 보 내기 기능 을 지원 하 라 고 요구 합 니 다.코드 중복...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.