OpenXml을 사용하여 Excel 내보내기
$(function() {
$(window.parent.document)
.find("#divToolbar").find("td")
.each(function() {
var id = $(this).attr("id");
if (id == "tdCreateNew" ||
id == "tdCreateByGrid" ||
id == "tdShowAllWork" ||
id == "tdDataImport" ||
id == "tdHelp" ||
id == "tdCustomDef" ||
id == "tdSearchCentra" ||
id == "tdSearchAll"
) {
$(this).prev().hide();
$(this).hide();
}
});
$("#imgExport").removeAttr("onclick").click(function () {
var urlData = getAppPath() + "/Yshd/Other/ExportToExcelByTid.aspx" +
"?tid=" + tid;
$.get(_akUrl(urlData), function (data) {
var path = data;
var url = getAppPath() + "/Components/UpAndDown/Download.aspx" +
"?path=" + escape(path);
loadHideFrame(url, false, window.parent.parent);
});
});
});
ExportToExcelByTid 코드 내보내기.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CpmBigDataImportService;
using System.Data;
using Appkit.Common;
using Appkit.Data;
using Appkit.Web.Management;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Xml;
public partial class Yshd_Other_ExportToExcelByTid : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string tid = AkCommon.GetQueryString("tid");
SearchCache cache = new SearchCache(tid);
string cond = cache.SQLExpression;
cond = (cond.Length == 0) ? cond : string.Format(" Where {0}", cond);
SqlConnectConfig sqc = new SqlConnectConfig().ConfigByDbString(GetConnectionString(AkContext.AppId, AkContext.PrjId));
MyType myType = new MyType(AkContext.AppId, cache.TypeName, sqc);
string fileName = Appkit.IO.AkDirService.UserRuntimeTempDir + "\\" + cache.TypeName + ".xlsx";
new Report().CreateExcelDoc(fileName, myType);
Response.Write(fileName);
}
private string GetConnectionString(string appid, string prjid)
{
string result = "";
XmlDocument doc = new XmlDocument();
string dbConfigFileName = string.Format(@"d:\appkit\platform\lib\engine.xml");
doc.Load(dbConfigFileName);
string path = string.Format("engine/all_prj_list/prj_list[@app_id='{0}']/prj[@id='{1}']/db_list/db[@id='MAIN']/connstr"
, UpperFisrtLetter(appid)
, UpperFisrtLetter(prjid));
XmlNode node = doc.SelectSingleNode(path);
if (null != node)
{
result = node.FirstChild.Value;
}
return result;
}
private string UpperFisrtLetter(string str)
{
return str.Substring(0, 1).ToUpper() + str.Substring(1, str.Length - 1).ToLower();
}
private class MyType
{
private SqlConnectConfig sqc;
public SqlConnectConfig Sqc
{
get { return sqc; }
}
private int[] fieldtypes;
public int[] Fieldtypes
{
get { return fieldtypes; }
}
private string[] title;
public string[] Title
{
get { return title; }
}
private string sql;
public string Sql
{
get { return sql; }
}
public MyType() { }
public MyType(string appid, string ele, SqlConnectConfig sqc)
{
this.sqc = sqc;
AccessHelper acc = new AccessHelper(appid);
string FieldsSql = string.Format("select prop_name,prop_dispname,prop_field_type from md_sys_property where ele_id in ( select ele_id from md_sys_element where ele_name='{0}')", ele);
List propnames = new List();
List dispnames = new List();
List _fieldtypes = new List();
DataTable dt = acc.ExecuteDataSet(acc.ConnectionString, FieldsSql).Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
propnames.Add(dt.Rows[i][0].ToString());
dispnames.Add(dt.Rows[i][1].ToString());
if (DBNull.Value == dt.Rows[i][2]
|| dt.Rows[i][2].ToString().Length == 0)
_fieldtypes.Add(0);
else
_fieldtypes.Add(int.Parse(dt.Rows[i][2].ToString()));
}
title = dispnames.ToArray();
sql = string.Format("select {0} from {1}"
, string.Join(",", propnames.ToArray())
, ele);
fieldtypes = _fieldtypes.ToArray();
}
}
private class Report
{
public void CreateExcelDoc(string filename, MyType myType)
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = doc.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart();
worksheetPart.Worksheet = new Worksheet();
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet()
{
Id = workbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Sheet1"
};
sheets.Append(sheet);
workbookPart.Workbook.Save();
SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
Row row = new Row();
row.Append(GetTitle(myType));
sheetData.AppendChild(row);
DataTable dt = MyCommon.GetDt(myType.Sql, myType.Sqc.ConnectString);
for (int i = 0; i < dt.Rows.Count; i++)
{
sheetData.AppendChild(GetRow(dt.Rows[i], myType.Fieldtypes));
}
worksheetPart.Worksheet.Save();
}
}
private Row GetRow(DataRow dr, int[] types)
{
Row row = new Row();
List cells = new List();
object[] arr = dr.ItemArray;
for (int i = 0; i < arr.Length; i++)
{
cells.Add(ConstructCell(arr[i].ToString()
, GetCellValues(types[i])));
}
row.Append(cells.ToArray());
return row;
}
private Cell[] GetTitle(MyType myType)
{
List cells = new List();
for (int i = 0; i < myType.Title.Length; i++)
{
cells.Add(ConstructCell(myType.Title[i]
, CellValues.String));
//GetCellValues(myType.Fieldtypes[i])
}
return cells.ToArray();
}
private CellValues GetCellValues(int t)
{
CellValues result;
switch (t)
{
case 0:
result = CellValues.Number;
break;
case 1:
result = CellValues.String;
break;
case 3:
case 7:
result = CellValues.String; // 、
break;
default:
//throw new Exception("GetCellValues");
result = CellValues.String;
break;
}
return result;
}
private Cell ConstructCell(string value, CellValues dataType)
{
return new Cell()
{
CellValue = new CellValue(value),
DataType = new EnumValue(dataType)
};
}
}
} | | | |
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.