C\#NPOI 를 통 해 Excel 을 조작 하 는 인 스 턴 스 코드
POI 는 아파 치가 Java 를 통 해 Office 를 조작 하 는 API 로 Excel,Word,PPT 등 을 조작 할 수 있어 매우 강력 하 다.그리고 C\#버 전의 NPOI 로 번역 되 었 습 니 다.log4j 와 log4net 이 비슷 합 니 다.
NPOI 의.net 4.0 버 전 전에는 office 2007 이상 XML 형식 은 지원 되 지 않 았 던 것 같 지만 최신 버 전 은 지원 되 었 습 니 다.아래 다섯 개의 프로그램 집합 을 다운로드 하고 인용 하면 사용 할 수 있다.
여기 서 엑셀 을 조작 하 는 클래스 를 제공 합 니 다.클래스 에서 4 가지 방법 을 제공 합 니 다.두 가지 내 보 내기,두 가지 가 져 오기.DataSet 을 통 해 여러 개의 Sheet 을 가 진 Excel 파일 을 내 보 낼 수도 있 고,DataTable 을 통 해 하나의 Sheet 을 가 진 Excel 을 내 보 낼 수도 있다.가 져 오 는 것 도 마찬가지 입 니 다.지정 한 Sheet 색인 을 통 해 DataTable 을 내 보 내 거나 모든 Sheet 을 내 보 내 DataSet 으로 되 돌려 줍 니 다.
public class ExcelHelper
{
/// <summary>
/// Excel Sheet DataTable
/// </summary>
/// <param name="filePath">Excel </param>
/// <param name="sheetIndex">Sheet </param>
/// <returns>DataTable</returns>
public static DataTable GetDataTable(string filePath, int sheetIndex)
{
return GetDataSet(filePath, sheetIndex).Tables[0];
}
/// <summary>
/// Excel DataSet
/// </summary>
/// <param name="filePath">Excel </param>
/// <param name="sheetIndex">Sheet , , Sheet</param>
/// <returns>DataSet</returns>
public static DataSet GetDataSet(string filePath, int? sheetIndex = null)
{
DataSet ds = new DataSet();
IWorkbook fileWorkbook;
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
if (filePath.Last() == 's')
{
try
{
fileWorkbook = new HSSFWorkbook(fs);
}
catch (Exception ex)
{
throw ex;
}
}
else
{
try
{
fileWorkbook = new XSSFWorkbook(fs);
}
catch
{
fileWorkbook = new HSSFWorkbook(fs);
}
}
}
for (int i = 0; i < fileWorkbook.NumberOfSheets; i++)
{
if (sheetIndex != null && sheetIndex != i)
continue;
DataTable dt = new DataTable();
ISheet sheet = fileWorkbook.GetSheetAt(i);
//
IRow header = sheet.GetRow(sheet.FirstRowNum);
List<int> columns = new List<int>();
for (int j = 0; j < header.LastCellNum; j++)
{
object obj = GetValueTypeForXLS(header.GetCell(j) as HSSFCell);
if (obj == null || obj.ToString() == string.Empty)
{
dt.Columns.Add(new DataColumn("Columns" + j.ToString()));
}
else
dt.Columns.Add(new DataColumn(obj.ToString()));
columns.Add(j);
}
//
IEnumerator rows = sheet.GetEnumerator();
while (rows.MoveNext())
{
int j = sheet.FirstRowNum + 1;
DataRow dr = dt.NewRow();
bool hasValue = false;
foreach (int K in columns)
{
dr[K] = GetValueTypeForXLS(sheet.GetRow(K).GetCell(K) as HSSFCell);
if (dr[K] != null && dr[K].ToString() != string.Empty)
{
hasValue = true;
}
}
if (hasValue)
{
dt.Rows.Add(dr);
}
j++;
}
ds.Tables.Add(dt);
}
return ds;
}
/// <summary>
/// DataTable Excel
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="file"> </param>
public static void GetExcelByDataTable(DataTable dt, string file)
{
DataSet ds = new DataSet();
ds.Tables.Add(dt);
GetExcelByDataSet(ds, file);
}
/// <summary>
/// DataSet Excel
/// </summary>
/// <param name="ds">DataSet</param>
/// <param name="file"> </param>
public static void GetExcelByDataSet(DataSet ds, string file)
{
IWorkbook fileWorkbook = new HSSFWorkbook();
int index = 0;
foreach (DataTable dt in ds.Tables)
{
index++;
ISheet sheet = fileWorkbook.CreateSheet("Sheet" + index);
//
IRow row = sheet.CreateRow(0);
for (int i = 0; i < dt.Columns.Count; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(dt.Columns[i].ColumnName);
}
//
for (int i = 0; i < dt.Rows.Count; i++)
{
IRow row1 = sheet.CreateRow(i + 1);
for (int j = 0; j < dt.Columns.Count; j++)
{
ICell cell = row1.CreateCell(j);
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}
}
//
MemoryStream stream = new MemoryStream();
fileWorkbook.Write(stream);
var buf = stream.ToArray();
// Excel
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write))
{
fs.Write(buf, 0, buf.Length);
fs.Flush();
}
}
/// <summary>
///
/// </summary>
/// <param name="cell"> </param>
/// <returns> </returns>
private static object GetValueTypeForXLS(HSSFCell cell)
{
if (cell == null)
return null;
switch (cell.CellType)
{
case CellType.Blank: //BLANK:
return null;
case CellType.Boolean: //BOOLEAN:
return cell.BooleanCellValue;
case CellType.Numeric: //NUMERIC:
return cell.NumericCellValue;
case CellType.String: //STRING:
return cell.StringCellValue;
case CellType.Error: //ERROR:
return cell.ErrorCellValue;
case CellType.Formula: //FORMULA:
default:
return "=" + cell.CellFormula;
}
}
}
이 안 에는 버 전 호환성 문제 와 같은 재 미 있 는 조작 이 있 을 수 있다.여 기 는 다 중 호 환 을 통 해 잘 이 루어 졌 습 니 다.그러나 2007 버 전의 xlsm 이 xsl 접미사 로 수정 되면 어떻게 합 니까?또는 2003 버 전의 xlsm 접미사 로 수정 되면 어떻게 합 니까?2003 버 전 을 xlsm 으로 바 꾸 면 xls 로 처리 할 수 있 지만 2007 년 에 xls 로 바 꾸 면 안 됩 니 다.이 때 파일 의 접미사 이름 을 강제로 수정 해서 열 수 있 습 니 다.그러나 위의 코드 가 이 기능 을 실현 하지 못 한 두 가지 원인 은 첫째,이렇게 하 는 것 이 안전 하지 않다 는 것 이다.2.이 럴 때 시스템 의 다른 곳 에서 이 파일 의 파일 이름 을 수정 해 야 합 니 다.클래스 에 넣 기 가 쉽 지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c\#NPOI 를 사용 하여 Excel 의 그림 을 가 져 와 로 컬 에 저장 하 는 알고리즘요구:엑셀 의 그림 을 읽 고 지정 한 경로 로 저장 합 니 다. 생각: NPOI 에서 GetAllPictures()방법 으로 이미지 정 보 를 얻 기 단계: 1.Windows 창 프로그램 새로 만 들 기 2.데스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.