C\#파일 업로드 실현 엑셀 문서 예제 코드 다운로드

요구 하 다.
환경 정보:WIN 2008 SERVER  개발 도구:VS 2015 개발 언어:C\#
요청:
  1.동기 화 데 이 터 를 클릭 한 후 인터페이스 에서 데이터 전시 페이지 를 가 져 오 는 동시에 잘못된 데 이 터 를 걸 러 내 고 데이터 베 이 스 를 기록 합 니 다.데 이 터 는 Excel 을 내 보 내 고 분류 내 보 내기 를 지원 합 니 다.
  2.Excel 확인 데 이 터 를 가 져 오고 서비스 처리 데 이 터 를 호출 한 후 데이터 베 이 스 를 기록 하 며 분류 내 보 내기 지원
이틀 동안 작은 기능 을 만 들 었 는데 다른 것 은 말 할 것 도 없 이 엑셀 가 져 오기 내 보 내기 에 대해 작은 정 리 를 했다.
파일 내 보 내기
이곳 의 파일 내 보 내기 는 밑바닥 에서 쓴 것 으로 개인 적 인 이해 가 유한 하 며 회사 에 속 하기 때문에 구체 적 인 코드 를 붙 이지 않 는 다.간단하게 사고방식 을 말 해 보 자.
먼저 엑셀 내 보 내기 관리 클래스 를 만 들 고 엑셀 파일 내 보 내기 템 플 릿 스타일 의 줄 마다 계산 방식 을 관리 하 는 등 프로젝트 에 해당 하 는 템 플 릿 과 일치 하 는 설정 파일 을 추가 해 야 합 니 다.
1.해당 프로필 을 읽 고 프로필 템 플 릿 정 보 를 가 져 옵 니 다.템 플 릿 을 어떻게 설정 하 는 지 는 말 하지 않 겠 습 니 다.xml 파일 작업 마당 에 이 글 이 많이 있 습 니 다.

2.XML 파일 정의 템 플 릿 id 에 따라 이 템 플 릿 을 조회 합 니 다.여기에 캐 시 메커니즘 이 있 습 니 다.두 가지 측면 에서 고려 할 수 있 습 니 다.1.파일 을 자주 읽 지 않도록 성능 부족 을 줄 입 니 다.

3.마지막 으로 지 정 된 id 아래 의 구체 적 인 내 보 내기 설정 을 읽 는 것 입 니 다.예 를 들 어 제목 헤더,상한 줄 수,간단 한 기본 값 지정 등 세부 적 인 처리 와 캐 시 메커니즘 도 포함 되 어 있 습 니 다.

프로필 템 플 릿 관 리 는 대체적으로 상기 몇 가지 기능 이 있 습 니 다.다음은 구체 적 인 데이터 베 이 스 를 내 보 내 는 것 입 니까?아니면 구체 적 인 코드 를 제공 할 수 없 지만 방향 은 말 할 수 있 습 니 다.
내 보 내기 관리 클래스 는 많은 작업 을 수행 해 야 합 니 다.데이터베이스 조회,데이터 필터,내 보 내기 형식 제어,내 보 내기 로그 설정,내 보 내기 경고 등 이 필요 합 니 다.

사실은 이것 은 간단 한 엑셀 내 보 내기 도구 가 아니 라 작은 내 보 내기 플랫폼 입 니 다.내 보 내기 실 체 를 연결 하여 내 보 내 는 각종 데 이 터 를 설정 해 야 합 니 다.그러나 개발 자가 자신의 수요 에 따라 해당 하 는 템 플 릿 을 작성 하고 내 보 내기 형식,데이터 검증,데이터 조회 방식 의 실체 가 내 보 내기 방식 을 계승 해 야 합 니 다.
(xls 나 csv 등 여러 형식)사용 자 는 DB 내 보 내기 정 보 를 구체 적 으로 기록 하고 내 보 내기 표 이름과 프로필,데이터 검증 만 하면 데이터 내 보 내기 작업 을 쉽게 할 수 있 습 니 다.

또한,파일 내 보 내기 작업,특히 데이터 베 이 스 는 바 텀 에서 response 흐름 을 통 해 페이지 로 전송 하여 다운로드 하 는 것 이 좋 습 니 다.데 이 터 는 상대 적 으로 정연 합 니 다.만약 에 페이지 에서 내 보 내기 페이지 를 직접 실행 하면 너무 무 겁 습 니 다.이것 은 실현 할 수 있 기 때 문 입 니 다.
파일 가 져 오기
 파일 을 가 져 오 려 면 먼저 업로드 해 야 합 니 다.파일 을 서버 가 지정 한 주소 에 업로드 한 다음 에 서버 파일 에 대한 분석 을 해 야 합 니 다.그 원 리 는 간단 합 니 다.업로드 한 파일 을 분석 하여 OLDB 방식 으로 분 석 된 파일 DataSet 을 가 져 온 다음 에 데이터 베 이 스 를 기록 하 는 것 입 니 다.다음은 업로드 파일 형식 검증 입 니 다.

구체 적 인 읽 기 방법 은 매우 간단 하 다.

public static ReturnValue ReadExcelToDataSet(string xlsFullFileName, bool isHDR, bool isIMEX, int limitSheetCount, bool isOnlyVerify)
{
 ReturnValue returnValue = new ReturnValue();
 string fileExt = UploadFileUtils.GetFileExt(xlsFullFileName);
 if (string.IsNullOrEmpty(fileExt) || !StringUtils.IsInLimitStr("xls,xlsx", fileExt))
 {
  returnValue.HasError = true;
  returnValue.ReturnCode = 1;
  returnValue.Message = "  excel    ";
  return returnValue;
 }
 if (!File.Exists(xlsFullFileName))
 {
  returnValue.HasError = true;
  returnValue.ReturnCode = 2;
  returnValue.Message = "     ";
  return returnValue;
 }
 StringBuilder stringBuilder = new StringBuilder();
 string str;
 if ("xlsx".Equals(fileExt, StringComparison.CurrentCultureIgnoreCase))
 {
  stringBuilder.Append("Provider=Microsoft.ACE.OLEDB.12.0");
  str = "Excel 12.0;";
 }
 else
 {
  stringBuilder.Append("Provider=Microsoft.Jet.OLEDB.4.0");
  str = "Excel 8.0;";
 }
 stringBuilder.Append(";Data Source=" + xlsFullFileName);
 stringBuilder.Append(";Extended Properties=\"" + str);
 if (isHDR)
 {
  stringBuilder.Append(";HDR=Yes");
 }
 if (isIMEX)
 {
  stringBuilder.Append(";IMEX=1");
 }
 stringBuilder.Append("\"");
 ExcelUtils.log.Debug(stringBuilder.ToString());
 OleDbConnection oleDbConnection = new OleDbConnection(stringBuilder.ToString());
 try
 {
  oleDbConnection.Open();
  DataTable oleDbSchemaTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]
  {
   null,
   null,
   null,
   "Table"
  });
  if (oleDbSchemaTable == null || oleDbSchemaTable.Rows.Count == 0)
  {
   returnValue.HasError = true;
   returnValue.ReturnCode = 3;
   returnValue.Message = "    sheet   ";
   ReturnValue result = returnValue;
   return result;
  }
  if (isOnlyVerify)
  {
   returnValue.HasError = false;
   returnValue.Message = "  sheet    ";
   returnValue.PutValue("dtSheet", oleDbSchemaTable);
   ReturnValue result = returnValue;
   return result;
  }
  int num = oleDbSchemaTable.Rows.Count;
  if (limitSheetCount > 0 && limitSheetCount < oleDbSchemaTable.Rows.Count)
  {
   num = limitSheetCount;
  }
  string[] array = new string[num];
  for (int i = 0; i < num; i++)
  {
   array[i] = oleDbSchemaTable.Rows[i]["TABLE_NAME"].ToString();
  }
  DataSet dataSet = new DataSet();
  for (int j = 0; j < num; j++)
  {
   string text = "select * from [" + array[j] + "]";
   ExcelUtils.log.Debug(text);
   OleDbCommand selectCommand = new OleDbCommand(text, oleDbConnection);
   OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(selectCommand);
   DataTable dataTable = new DataTable(array[j]);
   oleDbDataAdapter.Fill(dataTable);
   dataSet.Tables.Add(dataTable);
  }
  returnValue.HasError = false;
  returnValue.PutValue("dtSheet", oleDbSchemaTable);
  returnValue.PutValue("arrTableName", array);
  returnValue.ReturnObject = dataSet;
  returnValue.Message = "    ";
 }
 catch (Exception ex)
 {
  returnValue.HasError = true;
  returnValue.ReturnCode = -100;
  returnValue.ReturnException = ex;
  returnValue.Message = ex.Message;
  ExcelUtils.log.WarnFormat("ReadExcelToDataSet sbConn={0}   ,  :{1}", stringBuilder.ToString(), ex.Message);
 }
 finally
 {
  oleDbConnection.Close();
 }
 return returnValue;
}
읊다,읊조리다

좋은 웹페이지 즐겨찾기