C#에서 Excel 파일 읽기
C# 프로그램에서 Excel 파일(.xls)을 직접 읽을 수 있는 무료 또는 오픈 소스 라이브러리가 있습니까?
워크시트를 선택하고 데이터를 문자열로 읽기만 하면 됩니다.지금까지는 Excel의 Export to Unicode 텍스트 기능을 사용하여 결과(탭 구분) 파일을 해석하고 있습니다만, 수동 스텝은 생략하고 싶습니다.
var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "anyNameHere");
DataTable data = ds.Tables["anyNameHere"];
이게 제가 평소에 쓰는 거예요.AsEnumable()을 테이블 편집에 붙이기 때문에 조금 다릅니다.
var data = ds.Tables["anyNameHere"].AsEnumerable();
LINQ를 사용하여 필드에서 구조물을 검색하고 구축할 수 있습니다.
var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
new MyContact
{
firstName= x.Field<string>("First Name"),
lastName = x.Field<string>("Last Name"),
phoneNumber =x.Field<string>("Phone Number"),
});
Excel 파일에 포함된 단순한 데이터라면 ADO를 통해 데이터를 읽을 수 있습니다.NET. 여기에 나열된 연결 문자열을 참조하십시오.
http://www.connectionstrings.com/?http=http 2007 또는 http://www.connectionstrings.com/?http=http://http://www.connectionstrings.com/
-라이언
.select * from [Sheet1$]
ADO.NET 접근 방식은 빠르고 쉽지만, 특히 DataType을 처리하는 방법에 대해 알아두어야 할 몇 가지 특이한 점이 있습니다.
이 훌륭한 기사는 일반적인 함정을 피하는 데 도움이 됩니다.http://blog.lab49.com/archives/196
Excel 2003에서 사용한 것은 다음과 같습니다.
Dictionary<string, string> props = new Dictionary<string, string>();
props["Provider"] = "Microsoft.Jet.OLEDB.4.0";
props["Data Source"] = repFile;
props["Extended Properties"] = "Excel 8.0";
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
sb.Append(prop.Key);
sb.Append('=');
sb.Append(prop.Value);
sb.Append(';');
}
string properties = sb.ToString();
using (OleDbConnection conn = new OleDbConnection(properties))
{
conn.Open();
DataSet ds = new DataSet();
string columns = String.Join(",", columnNames.ToArray());
using (OleDbDataAdapter da = new OleDbDataAdapter(
"SELECT " + columns + " FROM [" + worksheet + "$]", conn))
{
DataTable dt = new DataTable(tableName);
da.Fill(dt);
ds.Tables.Add(dt);
}
}
Excel Data Reader는 어떻습니까?
http://exceldatareader.codeplex.com/
저는 프로덕션 환경에서 다양한 Excel 파일에서 SQL Server Compact로 대량의 데이터를 가져오는 데 분노해 왔습니다.그것은 매우 잘 작동하고 꽤 튼튼합니다.
를 사용하여 C#에 작성한 코드를 다음에 나타냅니다.몇 년 전 NET 1.1.이것이 당신이 필요로 하는 것인지 아닌지는 잘 모르겠습니다(또한 제 최선의 코드는 아닐 수도 있습니다).
using System;
using System.Data;
using System.Data.OleDb;
namespace ExportExcelToAccess
{
/// <summary>
/// Summary description for ExcelHelper.
/// </summary>
public sealed class ExcelHelper
{
private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FILENAME>;Extended Properties=\"Excel 8.0;HDR=Yes;\";";
public static DataTable GetDataTableFromExcelFile(string fullFileName, ref string sheetName)
{
OleDbConnection objConnection = new OleDbConnection();
objConnection = new OleDbConnection(CONNECTION_STRING.Replace("<FILENAME>", fullFileName));
DataSet dsImport = new DataSet();
try
{
objConnection.Open();
DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if( (null == dtSchema) || ( dtSchema.Rows.Count <= 0 ) )
{
//raise exception if needed
}
if( (null != sheetName) && (0 != sheetName.Length))
{
if( !CheckIfSheetNameExists(sheetName, dtSchema) )
{
//raise exception if needed
}
}
else
{
//Reading the first sheet name from the Excel file.
sheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();
}
new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", objConnection ).Fill(dsImport);
}
catch (Exception)
{
//raise exception if needed
}
finally
{
// Clean up.
if(objConnection != null)
{
objConnection.Close();
objConnection.Dispose();
}
}
return dsImport.Tables[0];
#region Commented code for importing data from CSV file.
// string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + System.IO.Path.GetDirectoryName(fullFileName) +";" +"Extended Properties=\"Text;HDR=YES;FMT=Delimited\"";
//
// System.Data.OleDb.OleDbConnection conText = new System.Data.OleDb.OleDbConnection(strConnectionString);
// new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " + System.IO.Path.GetFileName(fullFileName).Replace(".", "#"), conText).Fill(dsImport);
// return dsImport.Tables[0];
#endregion
}
/// <summary>
/// This method checks if the user entered sheetName exists in the Schema Table
/// </summary>
/// <param name="sheetName">Sheet name to be verified</param>
/// <param name="dtSchema">schema table </param>
private static bool CheckIfSheetNameExists(string sheetName, DataTable dtSchema)
{
foreach(DataRow dataRow in dtSchema.Rows)
{
if( sheetName == dataRow["TABLE_NAME"].ToString() )
{
return true;
}
}
return false;
}
}
}
Koogra는 C#로 작성된 오픈소스 컴포넌트로 Excel 파일을 읽고 씁니다.
OpenXML 형식(예: xlsx)에 대해서는 이전 파일 형식을 의미하는 .xls를 특별히 요청했지만 OpenXML SDK(http://msdn.microsoft.com/en-us/library/bb448854.aspx)를 적극 추천합니다.
얼마 전 C#의 Excel 파일을 많이 읽었는데 다음 두 가지 방법을 사용했습니다.
- Excel의 오브젝트에 직접 접근하여 메서드와 속성을 통해 조작하는 COM API
- Excel을 데이터베이스처럼 사용할 수 있는 ODBC 드라이버입니다.
후자의 접근 방식은 훨씬 더 빨랐습니다. 20개의 컬럼과 200개의 행이 있는 큰 테이블을 읽으면 COM을 통해 30초, ODBC를 통해 0.5초가 소요됩니다.따라서 데이터만 필요한 경우 데이터베이스 접근 방식을 권장합니다.
건배.
칼
Excel Mapper는 Excel 워크시트를 Strong Type Objects로 읽는 데 사용할 수 있는 오픈 소스 도구입니다(http://code.google.com/p/excelmapper/)).xls 형식과 xlsx 형식을 모두 지원합니다.
를 사용하여 xls/xlsx 파일을 읽는 간단한 방법을 보여 줍니다.NET. 아래가 당신에게 도움이 되길 바랍니다.
개인 DataTable ReadExcelToTable(문자열 경로){
//연결 문자열
string connstring = "Provider = Provider.ACE.OLEDB.12.0;데이터 소스=" + 경로 + ";확장 속성="Excel 8.0,HDR=NO;IMEX=1';;//같은 이름//string connstring = Provider = Provider.JET.OLEDB.4.0;데이터 소스=" + 경로 + //",확장 속성='Excel 8.0,HDR=NO;IMEX=1';;
using(OleDbConnection conn = new OleDbConnection(connstring)){접속합니다.오픈();//모든 시트 이름 가져오기DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid).테이블, 새 개체 []{null, null, null, null, table"};
//첫 번째 시트 이름 가져오기문자열 firstSheetName = sheetsName.행[0][2]ToString();
//문자열 쿼리string sql = 문자열입니다.포맷("SELECT * FROM [{0}]", first Sheet Name);
OleDbDataAdapter ada = 새 OleDbDataAdapter(sql,connstring);
DataSet 세트 = 새 DataSet();에이다채우기(세트);
반환 세트표[0];}}
코드는 기사 http://www.c-sharpcorner.com/uploadfile/d2dcfc/read-excel-file-with-net/에서 입수했습니다.자세한 내용은 이쪽에서 확인하실 수 있습니다.
무료는 아니지만, 최신 오피스와 함께 매우 훌륭한 자동화 기능이 있습니다.Net API. (오랫동안 API가 있었지만 COM이 고약했다) Office 앱은 숨겨진 백그라운드 프로세스로 남아 있는 동안 코드로 원하는 모든 것을 할 수 있습니다.
실례지만 사무실 피아가 이런 거 아니에요?
최근에는 LINQ를 늘리기 위해서도...Excel의 자동화 API를 사용하여 파일을 XML 스프레드시트로 저장하고 LINQ에서 XML로 파일을 가져옵니다.
용 스프레드시트 기어.NET은 의 Excel 호환 스프레드시트 컴포넌트입니다.NET. 델의 제품 페이지 우측에서 퍼포먼스에 대한 고객의 평가를 확인할 수 있습니다.무료 완전 기능 평가판을 통해 직접 사용해 볼 수 있습니다.
SmartXLS는 Excel 차트, Formula 엔진의 대부분의 기능을 지원하며 Excel2007 openxml 포맷을 읽고 쓸 수 있는 또 다른 Excel 스프레드시트 컴포넌트입니다.
.NET 컴포넌트 Excel Reader.NET은 고객의 요건을 충족할 수 있습니다.XLSX 및 XLS 파일을 읽는데 적합합니다.다음에서 시험해 보세요.
무료로 사용하기 쉬운 FileHelpers Library를 추천합니다.파일, 문자열 또는 스트림의 고정 길이 또는 구분된 레코드의 Excel에서 데이터를 Import/export하기 위한 NET 라이브러리 + 기타.
Excel 데이터 링크 문서 섹션 http://filehelpers.sourceforge.net/example_exceldatalink.html
Excel을 보다 깔끔하게 다룰 수 있는 오픈 소스 솔루션을 사용해 보십시오.
http://excelwrapperdotnet.codeplex.com/
Spreadsheet Gear는 훌륭합니다.네, 비용이 많이 들긴 하지만, 다른 솔루션과 비교해 보면 그럴 만한 가치가 있어요.이 제품은 빠르고 신뢰성이 높으며 매우 포괄적이며, 1년 반 이상 소프트웨어 업무에 종사해 온 결과, 고객 지원은 훌륭합니다!
델이 사용한 솔루션에는 다음이 필요했습니다.
- Excel로 생성된 파일 읽기/쓰기 허용
- 고속 퍼포먼스 (COM 사용과는 다른)
- MS Office Independent(MS Office가 설치되어 있지 않은 클라이언트 없이 사용할 수 있어야 함
- 무료 또는 오픈 소스(단, 적극적으로 개발)
몇 가지 선택지가 있지만 NPoi(.Java의 오랜 Poi 오픈 소스 프로젝트)의 NET 포트: http://npoi.codeplex.com/
또한 .doc 및 .ppt 파일 형식도 사용할 수 있습니다.
그냥 표 형식의 데이터라면.여기에서 다운로드 할 수 있는 Marcos Melli의 파일 데이터 도우미를 추천합니다.
파티에 늦었지만, 저는 LinqToExcel의 팬입니다.
지정된 Excel 스프레드시트를 로드하여 CSV로 저장하는 Excel 스프레드시트를 작성할 수 있습니다(수동으로 저장하는 대신).
c#부터 자동화할 수 있습니다.
csv에 들어가면 c# 프로그램이 그것을 검출할 수 있습니다.
(또한 엑셀로 프로그램해 달라고 하는 경우에는 모르는 척하는 것이 좋습니다.)
(편집: 아 네, 롭과 라이언 둘 다 맞습니다)
이 목적을 위해 엑셀의 '확장'을 만들어 온 것을 알고 있습니다.
Excel에서 "프로그램 X로 내보내기" 버튼을 만든 다음 프로그램을 읽을 수 있는 형식으로 데이터를 내보내고 보냅니다.
http://msdn.microsoft.com/en-us/library/ms186213.aspx 를 시작하는 것이 좋습니다.
행운을 빌어요
엑셀 파일을 관리해야 하는 간단한 데모 프로젝트를 방금 완료했습니다.GemBox 소프트웨어의 .NET 컴포넌트는 제 요구에 적합했습니다.몇 가지 제한이 있는 무료 버전이 있습니다.
http://www.gemboxsoftware.com/GBSpreadsheet.htm
Excel 패키지는 Excel 2007 파일을 읽고 쓰기 위한 오픈 소스(GPL) 컴포넌트입니다.작은 프로젝트에서 사용했는데 API가 간단해요.XLS가 아닌 XLSX(Excel 200&)에서만 동작합니다.
소스코드도 잘 정리되어 있어 사용하기 쉬운 것 같습니다(저처럼 기능을 확장하거나 사소한 문제를 수정해야 하는 경우).
처음에는 ADO를 시도했습니다.Net(Excel 연결 문자열) 접근 방식이지만, 불량한 해킹으로 가득 차 있습니다.예를 들어 두 번째 행에 숫자가 포함되어 있으면 아래 열의 모든 필드에 대해 int를 반환하고 맞지 않는 데이터는 조용히 폐기합니다.
ClosedX 사용비교적 큰 시스템에서는 ML을 사용할 수 있습니다.
- 공짜
- 설치가 간단함
- 스트레이트 포워드 코딩
- 응답성이 뛰어난 지원
- 개발자 팀은 새로운 제안에 매우 개방적입니다.대부분의 경우 같은 주 내에 새로운 기능과 버그 수정이 구현됩니다.
Take.io스프레드시트는 무료로 이 작업을 수행할 수 있습니다.이것 좀 보세요.
방금 ExcelLibrary를 사용하여 .xls 스프레드시트를 DataSet에 로드했습니다.나한테는 잘 먹혔어.
언급URL : https://stackoverflow.com/questions/15828/reading-excel-files-from-c-sharp
'programing' 카테고리의 다른 글
| .gitignore for Visual Studio 프로젝트 및 솔루션 (0) | 2023.04.19 |
|---|---|
| Git을 사용하여 이전 커밋에서 분기 (0) | 2023.04.19 |
| Java POI : 계산식이 아닌 Excel 셀 값을 읽는 방법 (0) | 2023.04.19 |
| Windows에 GRP와 같은 패턴 매칭 유틸리티가 있나요? (0) | 2023.04.19 |
| Xcode - NSUnknownKey 수정 방법예외', 이유:… 이 클래스는 키 X" 오류에 대한 키 값 코딩에 준거하지 않습니다. (0) | 2023.04.19 |