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;
}
읊다,읊조리다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.