C\#Excel 가 져 오기,내 보 내기
소개
1.1 제3자 라 이브 러 리:NPOI
설명:NPOI 는 POI 프로젝트 의.NET 버 전 으로 Excel,Word 의 읽 기와 쓰기 에 사용 할 수 있 습 니 다.
장점:Office 환경 을 설치 하지 않 아 도 된다.
다운로드 주소:http://npoi.codeplex.com/releases
1.2 엑셀 구조 소개
워 크 북(Workbook):모든 Excel 파일 은 워 크 북 으로 이해 할 수 있 습 니 다.
시트(Sheet):하나의 워 크 북(Workbook)은 여러 개의 워 크 시트 를 포함 할 수 있 습 니 다.
줄(row):하나의 워 크 시트(Sheet)는 여러 줄 을 포함 할 수 있 습 니 다.
엑셀 가 져 오기
2.1 운영 절차
2.2 NPOI 조작 코드
설명:Excel 파일 을 List
단계:
① Excel 파일 을 읽 고 워 크 북(Workbook)을 초기 화 합 니 다.
② 워 크 북 에서 워 크 시트(Sheet)를 가 져 옵 니 다.기본적으로 워 크 시트 의 첫 번 째 워 크 시트 입 니 다.
③ 워 크 시트 의 모든 줄 을 옮 겨 다 니 기(row);기본 값 은 두 번 째 줄 부터 옮 겨 다 니 며 첫 번 째 줄(번호 0)은 셀 머리 입 니 다.
④ 줄 을 옮 겨 다 니 는 모든 셀(cell)은 일정한 규칙 에 따라 대상 에 게 부여 하 는 속성 입 니 다.
코드:
/// <summary>
/// Excel2003 List
/// </summary>
/// <param name="cellHeard"> Key Value:{ { "UserName", " " }, { "Age", " " } };</param>
/// <param name="filePath"> </param>
/// <param name="errorMsg"> </param>
/// <returns> List </returns>
private static List<T> Excel2003ToEntityList<T>(Dictionary<string, string> cellHeard, string filePath, out StringBuilder errorMsg) where T : new()
{
errorMsg = new StringBuilder(); // ,Excel ,
List<T> enlist = new List<T>(); //
List<string> keys = cellHeard.Keys.ToList(); //
try
{
using (FileStream fs = File.OpenRead(filePath))
{
HSSFWorkbook workbook = new HSSFWorkbook(fs);
HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0); // Sheet
for (int i = 1; i <= sheet.LastRowNum; i++) // 1 , 0
{
// 1. , , Excel
if (sheet.GetRow(i) == null)
{
break;
}
T en = new T();
string errStr = ""; // , , : 1 :XXX ;
for (int j = 0; j < keys.Count; j++)
{
// 2. '.', , ,eg:UserEn.TrueName
if (keys[j].IndexOf(".") >= 0)
{
// 2.1
string[] properotyArray = keys[j].Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
string subClassName = properotyArray[0]; // '.'
string subClassProperotyName = properotyArray[1]; // '.'
System.Reflection.PropertyInfo subClassInfo = en.GetType().GetProperty(subClassName); //
if (subClassInfo != null)
{
// 2.1.1
var subClassEn = en.GetType().GetProperty(subClassName).GetValue(en, null);
// 2.1.2
System.Reflection.PropertyInfo properotyInfo = subClassInfo.PropertyType.GetProperty(subClassProperotyName);
if (properotyInfo != null)
{
try
{
// Excel , ,
properotyInfo.SetValue(subClassEn, GetExcelCellToProperty(properotyInfo.PropertyType, sheet.GetRow(i).GetCell(j)), null);
}
catch (Exception e)
{
if (errStr.Length == 0)
{
errStr = " " + i + " :";
}
errStr += cellHeard[keys[j]] + " ;";
}
}
}
}
else
{
// 3.
System.Reflection.PropertyInfo properotyInfo = en.GetType().GetProperty(keys[j]);
if (properotyInfo != null)
{
try
{
// Excel , ,
properotyInfo.SetValue(en, GetExcelCellToProperty(properotyInfo.PropertyType, sheet.GetRow(i).GetCell(j)), null);
}
catch (Exception e)
{
if (errStr.Length == 0)
{
errStr = " " + i + " :";
}
errStr += cellHeard[keys[j]] + " ;";
}
}
}
}
// ,
if (errStr.Length > 0)
{
errorMsg.AppendLine(errStr);
}
enlist.Add(en);
}
}
return enlist;
}
catch (Exception ex)
{
throw ex;
}
}
2.3 C\#논리 조작 코드설명:Excel 변환 후의 List
단계:
① 2.2 코드 를 호출 하여 Excel 파일 을 List
② List
③ List
④ 작업 결 과 를 되 돌려 준다.
코드:
public void ImportExcel(HttpContext context)
{
StringBuilder errorMsg = new StringBuilder(); //
try
{
#region 1. Excel List
// 1.1 Excel
HttpPostedFile filePost = context.Request.Files["filed"]; //
string filePath = ExcelHelper.SaveExcelFile(filePost); //
//
// key: ,
// value:
Dictionary<string, string> cellheader = new Dictionary<string, string> {
{ "Name", " " },
{ "Age", " " },
{ "GenderName", " " },
{ "TranscriptsEn.ChineseScores", " " },
{ "TranscriptsEn.MathScores", " " },
};
// 1.2 , List
List<UserEntity> enlist = ExcelHelper.ExcelToEntityList<UserEntity>(cellheader, filePath, out errorMsg);
#endregion
#region 2. List
#region 2.1
for (int i = 0; i < enlist.Count; i++)
{
UserEntity en = enlist[i];
string errorMsgStr = " " + (i + 1) + " :";
bool isHaveNoInputValue = false; //
if (string.IsNullOrEmpty(en.Name))
{
errorMsgStr += " ;";
isHaveNoInputValue = true;
}
if (isHaveNoInputValue) //
{
en.IsExcelVaildateOK = false;
errorMsg.AppendLine(errorMsgStr);
}
}
#endregion
#region 2.2 Excel
for (int i = 0; i < enlist.Count; i++)
{
UserEntity enA = enlist[i];
if (enA.IsExcelVaildateOK == false) // ,
{
continue;
}
for (int j = i + 1; j < enlist.Count; j++)
{
UserEntity enB = enlist[j];
//
if (enA.Name == enB.Name)
{
enA.IsExcelVaildateOK = false;
enB.IsExcelVaildateOK = false;
errorMsg.AppendLine(" " + (i + 1) + " " + (j + 1) + " ");
}
}
}
#endregion
// TODO:
#endregion
// 3.TODO: List 。 :
// 4.
bool isSuccess = false;
if (errorMsg.Length == 0)
{
isSuccess = true; // ,
}
var rs = new { success = isSuccess, msg = errorMsg.ToString(), data = enlist };
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
context.Response.ContentType = "text/plain";
context.Response.Write(js.Serialize(rs)); // Json
}
catch (Exception ex)
{
throw ex;
}
}
3.Excel 내 보 내기3.1 내 보 내기 프로 세 스
3.2 NPOI 조작 코드
설명:List
단계:
① 워 크 북 만 들 기(Workbook);
② 워 크 북 에 워 크 시트(Sheet)를 만 듭 니 다.
③ 워 크 시트 에 첫 번 째 줄(row)을 만 들 고 첫 번 째 행동 열 머리 는 cellHeard 의 값 을 순서대로 기록 합 니 다(열 이름 으로).
④ List
코드:
/// <summary>
/// Excle2003
/// </summary>
/// <param name="cellHeard"> Key Value:{ { "UserName", " " }, { "Age", " " } };</param>
/// <param name="enList"> </param>
/// <param name="sheetName"> </param>
/// <returns> </returns>
public static string EntityListToExcel2003(Dictionary<string, string> cellHeard, IList enList, string sheetName)
{
try
{
string fileName = sheetName + "-" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls"; //
string urlPath = "UpFiles/ExcelFiles/" + fileName; // URL ,
string filePath = HttpContext.Current.Server.MapPath("\\" + urlPath); //
// 1. ,
string directoryName = Path.GetDirectoryName(filePath);
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
// 2. ,
HSSFWorkbook workbook = new HSSFWorkbook(); //
ISheet sheet = workbook.CreateSheet(sheetName); //
IRow row = sheet.CreateRow(0);
List<string> keys = cellHeard.Keys.ToList();
for (int i = 0; i < keys.Count; i++)
{
row.CreateCell(i).SetCellValue(cellHeard[keys[i]]); // Key
}
// 3.List Excel
int rowIndex = 1; // ( )
foreach (var en in enList)
{
IRow rowTmp = sheet.CreateRow(rowIndex);
for (int i = 0; i < keys.Count; i++) // ,
{
string cellValue = ""; //
object properotyValue = null; //
System.Reflection.PropertyInfo properotyInfo = null; //
// 3.1 '.', , ,eg:UserEn.UserName
if (keys[i].IndexOf(".") >= 0)
{
// 3.1.1 ( 1 , )
string[] properotyArray = keys[i].Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
string subClassName = properotyArray[0]; // '.'
string subClassProperotyName = properotyArray[1]; // '.'
System.Reflection.PropertyInfo subClassInfo = en.GetType().GetProperty(subClassName); //
if (subClassInfo != null)
{
// 3.1.2
var subClassEn = en.GetType().GetProperty(subClassName).GetValue(en, null);
// 3.1.3
properotyInfo = subClassInfo.PropertyType.GetProperty(subClassProperotyName);
if (properotyInfo != null)
{
properotyValue = properotyInfo.GetValue(subClassEn, null); //
}
}
}
else
{
// 3.2 ,
properotyInfo = en.GetType().GetProperty(keys[i]);
if (properotyInfo != null)
{
properotyValue = properotyInfo.GetValue(en, null);
}
}
// 3.3
if (properotyValue != null)
{
cellValue = properotyValue.ToString();
// 3.3.1
if (cellValue.Trim() == "0001/1/1 0:00:00" || cellValue.Trim() == "0001/1/1 23:59:59")
{
cellValue = "";
}
}
// 3.4 Excel
rowTmp.CreateCell(i).SetCellValue(cellValue);
}
rowIndex++;
}
// 4.
FileStream file = new FileStream(filePath, FileMode.Create);
workbook.Write(file);
file.Close();
// 5.
return urlPath;
}
catch (Exception ex)
{
throw ex;
}
}
3.3 C\#논리 조작 코드설명:Excel 변환 후의 List
단계:
① List
② 3.2 를 호출 하여 List
③ 서버 가 엑셀 파일 을 저장 하고 다운로드 링크 를 되 돌려 줍 니 다.
코드:
public void ExportExcel(HttpContext context)
{
try
{
// 1.
List<UserEntity> enlist = new List<UserEntity>() {
new UserEntity{Name=" ",Age=22,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=80,MathScores=90}},
new UserEntity{Name=" ",Age=23,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=81,MathScores=91} },
new UserEntity{Name=" ",Age=24,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=82,MathScores=92} },
new UserEntity{Name=" ",Age=25,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=83,MathScores=93} },
new UserEntity{Name=" ",Age=26,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=84,MathScores=94} },
};
// 2.
// key: ,
// value:Excel
Dictionary<string, string> cellheader = new Dictionary<string, string> {
{ "Name", " " },
{ "Age", " " },
{ "GenderName", " " },
{ "TranscriptsEn.ChineseScores", " " },
{ "TranscriptsEn.MathScores", " " },
};
// 3. Excel ,
string urlPath = ExcelHelper.EntityListToExcel2003(cellheader, enlist, " ");
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
context.Response.ContentType = "text/plain";
context.Response.Write(js.Serialize(urlPath)); // Json
}
catch (Exception ex)
{
throw ex;
}
}
3.4 코드 분석핵심 코드 는 주로 cellheader 와 List
소스 코드 다운로드
4.1 운행 도
원본 다운로드:http://xiazai.jb51.net/201605/yuanma/C-Excel(jb51.net).rar
이상 이 바로 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.