Microsoft 를 사용하지 않고 C# 의 Excel 파일을 읽는 방법.Office.Interop.Excel 라이브러리
가 있습니다.C#의 Net-Windows 애플리케이션.엑셀을 열어 처리해야 합니다.Microsoft 를 사용하지 않고 어떻게 하면 좋을까요.Office.Interop.Excel 라이브러리?
Excel 97-2003 파일(xls)을 읽을 때는 CSharpJExcel을, Excel 2007/2010 파일(Office Open XML 형식, xlsx)을 읽을 때는 Excel 패키지를 추천합니다.
둘 다 완벽하게 작동합니다.그들은 어떤 것에도 전혀 의존하지 않는다.
CSharpJExcel을 사용한 샘플:
Workbook workbook = Workbook.getWorkbook(new System.IO.FileInfo(fileName));
var sheet = workbook.getSheet(0);
...
var content = sheet.getCell(colIndex, rowIndex).getContents();
...
workbook.close();
Excel Package를 사용한 샘플:
using (ExcelPackage xlPackage = new ExcelPackage(existingFile))
{
// get the first worksheet in the workbook
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1];
int iCol = 2; // the column to read
// output the data in column 2
for (int iRow = 1; iRow < 6; iRow++)
Console.WriteLine("Cell({0},{1}).Value={2}", iRow, iCol,
worksheet.Cell(iRow, iCol).Value);
// output the formula in row 6
Console.WriteLine("Cell({0},{1}).Formula={2}", 6, iCol,
worksheet.Cell(6, iCol).Formula);
} // the using statement calls Dispose() which closes the package.
편집:
Excel Data Reader라는 두 가지 형식을 모두 처리할 수 있는 것으로 보이는 프로젝트가 있습니다.그것은 내가 말한 다른 것들과 마찬가지로 쉽다.
다른 라이브러리도 있습니다.
NPOI: Apache POI 라이브러리의 포트.네트워크:
매우 파워풀하고 자유롭고 오픈 소스입니다.Excel(97-2010) excel및 Word excel PowerPoint excel excel excel excel excel 。Excel 라이브러리:
Excel 97-2003(xls)입니다.에플러스:
Excel 패키지 ★★★★★★★★★★★★★★★★★」사용하기 쉬울 것 같아요.
var fileName = @"C:\ExcelFile.xlsx";
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; ;
using (var conn = new OleDbConnection(connectionString))
{
conn.Open();
var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM [" + sheets.Rows[0]["TABLE_NAME"].ToString() + "] ";
var adapter = new OleDbDataAdapter(cmd);
var ds = new DataSet();
adapter.Fill(ds);
}
}
특히 서버에서 OleDB를 실행하는 경우 OleDB를 사용하지 않도록 권장합니다.장기적으로는 비용이 더 많이 들 것입니다.예를 들어, Sptroc에서 OleDB를 사용하여 Stored Procedure를 호출하는 SSIS 작업이 엑셀 파일을 읽고 SQL 상자를 계속 크래시했습니다.Sproc에서 OleDB 자료를 꺼내서 서버가 다운되는 걸 멈췄어요
서버측 Office Automation에 관한 고려사항에 관해 Office 2003 및 XML 파일을 사용하여 작업을 수행하는 것이 더 나은 방법입니다.주의: Office 2003은 이 서비스를 이용하기 위한 최소 요건입니다.
Excel 참조: http://www.roelvanlisdonk.nl/?p=924 (기타 예시는 더 조사해주세요)
Excel 스프레드시트 작성 레퍼런스:http://weblogs.asp.net/jgaylord/archive/2008/08/11/use-linq-to-xml-to-generate-excel-documents.aspx
public void ReadExcelCellTest()
{
XDocument document = XDocument.Load(@"C:\BDATA\Cars.xml");
XNamespace workbookNameSpace = @"urn:schemas-microsoft-com:office:spreadsheet";
// Get worksheet
var query = from w in document.Elements(workbookNameSpace + "Workbook").Elements(workbookNameSpace + "Worksheet")
where w.Attribute(workbookNameSpace + "Name").Value.Equals("Settings")
select w;
List<XElement> foundWoksheets = query.ToList<XElement>();
if (foundWoksheets.Count() <= 0) { throw new ApplicationException("Worksheet Settings could not be found"); }
XElement worksheet = query.ToList<XElement>()[0];
// Get the row for "Seat"
query = from d in worksheet.Elements(workbookNameSpace + "Table").Elements(workbookNameSpace + "Row").Elements(workbookNameSpace + "Cell").Elements(workbookNameSpace + "Data")
where d.Value.Equals("Seat")
select d;
List<XElement> foundData = query.ToList<XElement>();
if (foundData.Count() <= 0) { throw new ApplicationException("Row 'Seat' could not be found"); }
XElement row = query.ToList<XElement>()[0].Parent.Parent;
// Get value cell of Etl_SPIImportLocation_ImportPath setting
XElement cell = row.Elements().ToList<XElement>()[1];
// Get the value "Leon"
string cellValue = cell.Elements(workbookNameSpace + "Data").ToList<XElement>()[0].Value;
Console.WriteLine(cellValue);
}
최근에 Excel 워크북 파일을 DataSet으로 변환하는 라이브러리를 찾았습니다: Excel 데이터 리더
XLSX 파일이 아닌 XLS 파일을 열 필요가 있는 경우는, http://npoi.codeplex.com/ 를 추천합니다.우리는 그것을 우리의 프로젝트에 좋은 영향을 미치기 위해 사용해 왔다.
GS Pread를 찾습니다.NET. 또한 OpenSource 프로젝트이며 Office를 설치할 필요가 없습니다.Microsoft Excel의 API를 사용하여 Google 스프레드시트로 작업할 수 있습니다.이전 코드를 사용하여 Google 스프레드쉬트에 액세스하려면 GS프리애드를 참조하십시오.NET이 가장 좋은 방법입니다.몇 개의 행을 추가해야 합니다.
Set objExcel = CreateObject("GSpreadCOM.Application")
// Name - User name, any you like
// ClientIdAndSecret - `client_id|client_secret` format
// ScriptId - Google Apps script ID
app.MailLogon(Name, ClientIdAndSecret, ScriptId);
추가 코드는 변경되지 않습니다.
http://scand.com/products/gspread/index.html
OleDB를 사용하여 Excel 파일에서 데이터를 읽을 수 있습니다.다음과 같이 시도해 주십시오.
DataSet ds_Data = new DataSet();
OleDbConnection oleCon = new OleDbConnection();
string strExcelFile = @"C:\Test.xlsx";
oleCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelFile + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";;
string SpreadSheetName = "";
OleDbDataAdapter Adapter = new OleDbDataAdapter();
OleDbConnection conn = new OleDbConnection(sConnectionString);
string strQuery;
conn.Open();
int workSheetNumber = 0;
DataTable ExcelSheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
SpreadSheetName = ExcelSheets.Rows[workSheetNumber]["TABLE_NAME"].ToString();
strQuery = "select * from [" + SpreadSheetName + "] ";
OleDbCommand cmd = new OleDbCommand(strQuery, conn);
Adapter.SelectCommand = cmd;
DataSet dsExcel = new DataSet();
Adapter.Fill(dsExcel);
conn.Close();
Excel.dll 라이브러리를 사용한 적이 있습니다.
- 오픈 소스
- 경량
- 빠른
- xls 및 xlsx 지원
매뉴얼은 https://exceldatareader.codeplex.com/ 에서 구할 수 있습니다.
강력히 추천합니다.
솔루션을 찾고 있었는데 스프레드시트 라이트를 발견했습니다.
아주 유망해 보이는군오픈 소스로 Nuget 패키지로 이용 가능합니다.
interop을 사용하지 않으려면 OfficeWriter를 사용해 보십시오.파일에 대해 실제로 처리해야 하는 처리량에 따라서는 과잉 처리가 될 수도 있습니다.무료 체험판을 요청할 수 있습니다.문서화 사이트에서 완전히 문서화된 API를 이용할 수 있습니다.
면책사항: 저는 최신 버전을 구축한 엔지니어 중 한 명입니다.
또, 다음과 같은 커머셜 컨트롤을 통해서도 할 수 있습니다.http://www.syncfusion.com/products/reporting-edition/xlsio
나는 상업적인 해결책으로 끝나기 전에 몇 년 동안 고생해 왔다.개발 환경에서는 매우 사용하기 쉽지만 도입에는 악몽이 될 수 있는 OLEDB 접근방식을 처음 시도했습니다.그 후 오픈 소스 솔루션을 사용해 보았습니다만, 대부분의 솔루션이 구식이며, 서포트가 좋지 않습니다.
Syncfusion의 xlsio 컨트롤은 제가 사용하고 있는 컨트롤일 뿐이고 만족하고 있는 컨트롤이지만 다른 컨트롤은 존재합니다.만약 당신이 그것을 어필할 수 있다면 주저하지 마세요. 그것이 최선의 해결책입니다. 왜요?시스템에 의존하지 않고 모든 버전의 오피스를 즉시 지원하기 때문입니다.다른 장점들 중에서, 그것은 정말 빠르다.
그리고 저는 synfusion을 위해 일하지 않습니다;)
Interop에서 엑셀을 오픈합니다.Office를 설치하지 않고 Excel을 실행합니다.Interop을 추가할 수 있습니다.NUGET으로 탁월.
public DataTable ReadExcel(string fileName)
{
Excel.Application FExcelObject = new Excel.Application();
var FWorkbookObject = FExcelObject.Workbooks.Open(fileName,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
//var sheets = FWorkbookObject.Sheets[1];
foreach (Excel.Worksheet sheets in FWorkbookObject.Sheets)
{
System.Data.DataTable dt = new System.Data.DataTable(sheets.Name);
DataRow dr;
StringBuilder sb = new StringBuilder();
int jValue = sheets.UsedRange.Cells.Columns.Count;
int iValue = sheets.UsedRange.Cells.Rows.Count;
for (int j = 1; j <= jValue; j++)
{
dt.Columns.Add("column" + j, System.Type.GetType("System.String"));
}
for (int i = 1; i <= iValue; i++)
{
dr = dt.NewRow();
for (int j = 1; j <= jValue; j++)
{
var oRng = (Microsoft.Office.Interop.Excel.Range)sheets.Cells[i, j];
string strValue = oRng.Text.ToString();
dr["column" + j] = strValue;
}
dt.Rows.Add(dr);
}
return dt;
}
return new DataTable();
}
}
언급URL : https://stackoverflow.com/questions/9155642/how-to-read-an-excel-file-in-c-sharp-without-using-microsoft-office-interop-exce
'programing' 카테고리의 다른 글
SQL 변수에 exec 결과를 할당하는 방법 (0) | 2023.04.14 |
---|---|
SQL 테이블을 만들고 Excel 스프레드시트 데이터로 입력하는 방법은 무엇입니까? (0) | 2023.04.14 |
WPF 바인딩 : 바인딩 경로에서의 캐스팅 (0) | 2023.04.14 |
Python에서 콤마로 분할하고 공백을 제거하는 방법은 무엇입니까? (0) | 2023.04.14 |
Windows에서 Jenkins 서비스 시작/중지 및 재시작 (0) | 2023.04.14 |