데이터를 읽거나 생성할 수 있는 ExcelHelper 범용 클래스
25395 단어 Excel
1. OFFICE EXCEL 구성 요소를 통해 장점: EXCEL 파일을 읽고 생성하는 것이 편리하고 단점: 서버에 OFFICE 소프트웨어를 설치해야 하며 프로세스가 제때에 실행되지 않음
2. 제3자 구성 요소(예: NPOI)를 통해 장점: OFFICE 소프트웨어를 설치할 필요가 없고 단점: 제3자 구성 요소를 도입해야 한다. 물론 이것은 비교적 강하다.
3. EXCEL을 데이터베이스로 삼아 연결한 후 SQL 문장을 활용하여 읽고 쓰면 HTML 표로 직접 연결할 수 있다. 장점: 별도의 구성 요소가 필요 없고 단점: SQL과 HTML 표를 연결하는 것이 번거롭다.
세 가지 방법은 내가 모두 사용한 적이 있다. 만약에 BS 사이트 프로그램을 개발하면 두 번째, 세 번째 방법을 사용하고, CS 구조를 개발하면 첫 번째 또는 두 번째 방법을 사용하는 것을 제안한다.
다음은 제가 BS단에 쓴 ExcelHelper 범용 클래스입니다. 데이터를 읽거나 생성하는 데 사용할 수 있습니다. 비교적 편리합니다. 기술 원리는 상술한 세 번째 방법입니다. 코드는 다음과 같습니다. 결함이 있을 수 있습니다. 고수들이 이해합니다.
namespace ASOTS.Models
{
public abstract class ExcelHelper
{
/// <summary>
/// EXCEL sheet
/// </summary>
/// <returns></returns>
public static DataTable GetTableFromExcel(string filePath, string fileExt, string tableName, int colsCount)
{
string connstr = null;
if (fileExt == ".xls")
{
connstr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
}
else
{
connstr = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + filePath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
}
using (OleDbConnection excelConn = new OleDbConnection(connstr))
{
excelConn.Open();
// EXCEL
DataTable schemaTable = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
// sheet
DataView schemaView = new DataView(schemaTable);
schemaView.RowFilter = "TABLE_NAME='" + tableName + "$'";
schemaTable = schemaView.ToTable();
if (schemaTable != null && schemaTable.Rows.Count > 0)
{
DataTable schemaTable_Cols = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tableName + "$", null });
schemaView = new DataView(schemaTable_Cols);
schemaView.RowFilter = "ORDINAL_POSITION<=" + colsCount.ToString();
schemaView.Sort = "ORDINAL_POSITION asc";
schemaTable_Cols = schemaView.ToTable();
string selectCols = "";
for (int i = 0; i < schemaTable_Cols.Rows.Count; i++)
{
selectCols += "," + schemaTable_Cols.Rows[i]["COLUMN_NAME"].ToString();
}
selectCols = selectCols.Substring(1);
// sheet
string strSql = "select " + selectCols + " from [" + tableName + "$]";
OleDbDataAdapter da = new OleDbDataAdapter(strSql, excelConn);
DataSet ds = new DataSet();
da.Fill(ds, tableName);
excelConn.Close();
return ds.Tables[tableName];
}
else
{
excelConn.Close();
return null;
}
}
}
/// <summary>
/// HTML
/// </summary>
/// <param name="data"></param>
/// <param name="tableAttributes"></param>
/// <param name="headers"></param>
/// <returns></returns>
public static string SetDataToHtmlTable(IEnumerable data, string tableAttributes, params KeyValuePair<string, string>[] headers)
{
StringBuilder htmlTableBuilder = new StringBuilder();
htmlTableBuilder.AppendFormat("<table {0}>", tableAttributes);
if (data.GetEnumerator().Current == null)
{
throw new Exception(" !");
}
Type t = data.GetEnumerator().Current.GetType();
string[] cellIndexs = new string[headers.Count()];
htmlTableBuilder.Append("<tr>");
for (int i = 0; i < headers.Count(); i++)
{
cellIndexs[i] = headers[i].Key;
htmlTableBuilder.AppendFormat("<th>{0}</th>", headers[i].Value);
}
htmlTableBuilder.Append("</tr>");
foreach (var item in data)
{
htmlTableBuilder.Append("<tr>");
for (int i = 0; i < cellIndexs.Length; i++)
{
object pValue = t.GetProperty(cellIndexs[i]).GetValue(item, null);
htmlTableBuilder.AppendFormat("<td>{0}</td>", pValue);
}
htmlTableBuilder.Append("</tr>");
}
htmlTableBuilder.Append("</table>");
return htmlTableBuilder.ToString();
}
/// <summary>
/// DataTable HTML
/// </summary>
/// <param name="data"></param>
/// <param name="tableAttributes"></param>
/// <param name="headers"></param>
/// <returns></returns>
public static string SetDataToHtmlTable(DataTable dataTable, string tableAttributes, params KeyValuePair<string, string>[] headers)
{
StringBuilder htmlTableBuilder = new StringBuilder();
htmlTableBuilder.AppendFormat("<table {0}>", tableAttributes);
htmlTableBuilder.Append("<tr>");
for (int i = 0; i < headers.Count(); i++)
{
htmlTableBuilder.AppendFormat("<th>{0}</th>", headers[i].Value);
}
htmlTableBuilder.Append("</tr>");
foreach (DataRow row in dataTable.Rows)
{
htmlTableBuilder.Append("<tr>");
for (int i = 0; i < headers.Count(); i++)
{
htmlTableBuilder.AppendFormat("<td>{0}</td>", row[headers[i].Key]);
}
htmlTableBuilder.Append("</tr>");
}
htmlTableBuilder.Append("</table>");
return htmlTableBuilder.ToString();
}
}
public class KeyValueList<TKey, TValue> : List<KeyValuePair<TKey, TValue>>
{
public void Add(TKey key, TValue value)
{
base.Add(new KeyValuePair<TKey, TValue>(key, value));
}
}
}
호출 방법은 다음과 같습니다.
//
DataTable resultTable = ExcelHelper.GetTableFromExcel(saveFilePath, fileExt, "data", 10);
// ( MVC ,WEBFORM )
KeyValueList<string, string> headers = new KeyValueList<string, string>() {
{"year"," "},
{"month"," "},
{"stage1count"," "},
{"stage2count"," "},
{"stage3count"," "},
{"stage4count"," "},
{"yearincount"," "},
{"stagetotalcount"," "},
{"stage1rate"," "},
{"stage2rate"," "},
{"stage3rate"," "},
{"stage4rate"," "}
};
string tableAttributes = "border='1' cellspacing='3' cellpadding='3'";
string htmlTable=ExcelHelper.SetDataToHtmlTable(model, tableAttributes, headers.ToArray());
byte[] b = System.Text.Encoding.UTF8.GetBytes(htmlTable);
return File(b, "application/vnd.ms-excel", string.Format("StageSummary_{0}_{1}_{2}.xls",orgcode,startym,endym));
그 중에서: KeyValueList는 제가 만든 집합 클래스입니다. 주로 헤더를 생성하는 데 사용되고 헤더가 데이터 열에 대응하는 데 사용됩니다. 클래스를 작성하는 이유는 List
더 많은 IT 관련 정보와 기술 기사, 저의 개인 사이트에 오신 것을 환영합니다:http://www.zuowenjun.cn/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel Grep toolExcel Grep tool ■히나가타 ■ 시트 구성 ExcelGrep.cls...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.