C#에서 .Net-Windows 응용 프로그램을 사용하고 있습니다. Excel을 열고 처리해야합니다. Microsoft.Office.Interop.Excel 라이브러리를 사용하지 않고 어떻게이 작업을 수행 할 수 있습니까?Microsoft.Office.Interop.Excel 라이브러리를 사용하지 않고 C#으로 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를 사용하여 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();
OleDB를 사용하지 않을 것을 강력히 권합니다. 특히 서버에서 실행될 경우 더욱 그렇습니다. 장기적으로 볼 때 더 많은 비용을 지불 할 가능성이 있습니다. 예를 들어, SSI 작업을 통해 OleDB가 sptroc에서 Excel 파일을 읽고 SQL 상자를 손상시키지 않고 저장 프로 시저를 호출했습니다. 나는 sproc에서 OleDB를 꺼내 서버 중단을 막았다.
더 나은 방법은 Office 2003과 XML 파일 (Considerations for server-side Automation of Office)을 사용하는 것입니다. 참고 :
참조를 엑셀에서 읽어 : http://www.roelvanlisdonk.nl/?p=924 엑셀 스프레드 시트를 작성하기위한
참조을 (다른 예를 찾기 위해 더 많은 연구를 바랍니다) : http://weblogs.asp.net/jgaylord/archive/2008/08/11/use-linq-to-xml-to-generate-excel-documents.aspx 오피스 2003이 비행 할 수있는 최소 요구 사항입니다
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);
}
그것은 서버에 대한 위험이다 순전히 인 OleDB이다; 그것은 매우 위험한 Stored Proc를 통해 외부 SQL 서버를 실행합니다. – philu
내가 최근에 DataSet으로 Excel 통합 문서 파일을 변환이 라이브러리 발견 Excel Data Reader
을은 내가보기 엔 엑셀 2007/2010 파일 (오피스 오픈 XML 포맷, XLSX)를 읽기 위해 엑셀 97-2003 파일 (XLS)와 ExcelPackage를 읽는 CSharpJExcel을 권장합니다.
둘 다 완벽하게 작동합니다. 그들은 절대적으로 어떤 것에도 의존하지 않습니다.
CSharpJExcel를 사용하여 샘플 :
Workbook workbook = Workbook.getWorkbook(new System.IO.FileInfo(fileName));
var sheet = workbook.getSheet(0);
...
var content = sheet.getCell(colIndex, rowIndex).getContents();
...
workbook.close();
ExcelPackage 사용하여 샘플 :
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.
편집 :
가있는 것 같다 다른 프로젝트, ExcelDataReader,이를 능력 두 가지 형식 모두를 처리 할 수 있습니다. 그것은 내가 언급 한 다른 것들처럼 쉽습니다.
NPOI: Port of the Apache POI library to .NET :
매우 강력한 무료 및 오픈 소스는 다른 라이브러리가 있습니다. Excel (97-2010) 외에 Word 및 PowerPoint 파일도 지원합니다.
ExcelLibrary :
Excel 97-2003 (xls) 파일 만 지원합니다.EPPlus :
ExcelPackage의 확장 프로그램입니다. 사용하기 쉽다 (아마).
이 ExcelDataReader는 OLEDB보다 빠르며 엄청나게 빠릅니다. –
ExcelDataReader가 GitHub로 마이그레이션 중입니다. https://github.com/ExcelDataReader/ExcelDataReader –
interop을 사용하지 않으려는 경우 OfficeWriter을 사용해보세요. 파일에서 실제로 처리해야하는 처리량에 따라 지나치게 많을 수도 있습니다. 무료 평가판을 요청할 수 있습니다. documentation site에는 완전히 문서화 된 API가 있습니다.
면책 조항 : 저는 최신 버전을 제작 한 엔지니어 중 한 명입니다.
또한 내가해야 할 일이 같은 상용 제어에 의한 수 : 나는 상용 솔루션을 종료하기 전에 년 동안 struging 된 http://www.syncfusion.com/products/reporting-edition/xlsio
. 우선 개발 환경에서 사용하기가 쉬운 OLEDB 방식을 시도했지만 배포 할 기사가 될 수 있습니다. 그럼 오픈 소스 솔루션을 시도했지만 대부분의 구식이며 나쁜 지원.
syncfusion의 xlsio 컨트롤은 내가 사용하고 만족 스럽지만 다른 것들이 있습니다. 당신이 그것을 권유 할 수 있다면 주저하지 말고 가장 좋은 해결책입니다. 왜? 그것은 시스템과 아무런 관련이 없으며 모든 버전의 사무소를 즉시 지원하기 때문입니다. 같은 다른 장점들 중, 정말 빠릅니다.
그리고 아니, 내가 synfusion 작동하지 않습니다
당신이 XLS 파일이 아닌 XLSX 파일을 열해야하는 경우), http://npoi.codeplex.com/는 좋은 선택이 될 것입니다. 우리는 그것을 프로젝트에 좋은 영향을 미치기 위해 사용했습니다.
I는 Excel.dll 라이브러리를 사용하고 있습니다 :
- 오픈 소스를
- 빠른
- XLS와 호환 및 XLSX ,
여기에 사용할 수있는 문서 : https://exceldatareader.codeplex.com/
강력 추천.
필자는 단지 솔루션을 찾고 매우 유망한 보이는 Spreadsheetlight
건너되었다. 오픈 소스이며 너겟 패키지로 제공됩니다.
GSpread.NET을 찾으십시오. 또한 OpenSource 프로젝트이기 때문에 Office를 설치할 필요가 없습니다. Microsoft Excel의 API를 사용하여 Google 스프레드 시트 작업을 할 수 있습니다. Google 스프레드 시트에 액세스하기 위해 이전 코드를 다시 사용하려면 GSpread.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);
또한 코드가 변경되지 : 당신은 몇 행을 추가해야합니다.
- 1. 모듈을 사용하지 않고 Excel 파일을 읽으십시오.
- 2. Excel 파일을 읽는 방법?
- 3. 스칼라에서 Excel 파일을 읽는 방법
- 4. 컴퓨터를 사용하지 않고 장치에서 내 db 파일을 읽는 방법
- 5. 부스트 라이브러리를 사용하여 도트 파일을 읽는 방법
- 6. 다른 파일을 사용하지 않고 파일을 자르는 방법?
- 7. C에서 Open Excel 파일을 읽는 방법
- 8. Google 애플리케이션 엔진에서 Excel 파일을 읽는 방법
- 9. xmldocument를 사용하여 Excel 파일을 읽는 방법
- 10. 네트워크 드라이브에서 Excel 파일을 읽는 방법?
- 11. POI API를 사용하지 않고 Excel 시트 읽기
- 12. PDF 파일을 읽는 방법
- 13. office beeing을 설치하지 않고 Excel 파일을 읽는 중
- 14. 외부 라이브러리를 사용하지 않고 파일을 압축하는 방법은 무엇입니까?
- 15. 거대한 파일을 차단하지 않고 청크로 읽는 방법?
- 16. Python과 glob을 사용하지 않고 Windows에서 일본어 파일을 읽는 중
- 17. JSP에서 스크립틀릿을 사용하지 않고 첨부 파일을 읽는 방법은 무엇입니까?
- 18. Eclipse를 사용하지 않고 .apk 파일을 만드는 방법
- 19. 어떻게 Excel 파일을 잠그지 않고 열 수 있습니까?
- 20. Python 결정자 계산 (외부 라이브러리를 사용하지 않고)
- 21. 라이브러리를 사용하지 않고 JPEG에서 EXIF 방향 추출
- 22. 라이브러리를 사용하지 않고 IE의 맞춤 이벤트
- 23. 파일을 거꾸로 읽는 방법?
- 24. 로컬 json 파일을 읽는 방법?
- 25. FileNotFound Excel 파일을 읽는 중 예외가 발생했습니다.
- 26. C++에서 라이브러리를 사용하지 않고 이미지의 객체를 찾는 방법?
- 27. math.h 라이브러리를 사용하지 않고 전원 함수를 만드는 방법
- 28. android에서 서드 파티 라이브러리를 사용하지 않고 PDF 뷰어를 개발하는 방법
- 29. 하드 코드를 사용하지 않고 DataGridView로 Excel
- 30. Excel interop에서 Range.Top을 읽는 방법
주 - 시트가 암호로 보호되어 있으면 OLEDB가 작동하지 않습니다. –
감사합니다, 그냥 내가 무엇을 찾고 있었습니까 – Mana
@ Aleksandar,이 솔루션은 또한 리눅스에서 작동합니까? – Dalton