Excel 파일에서 열을 읽는 코드를 작성했습니다. Microsoft.Office.Interop.Excel을 사용하면 먼저 Range 전체를 읽고 System.Array 값으로 System.Array에 몇 가지 연산을 수행 한 다음 ListBox 요소를 채우기 때문에 List로 변환합니다.Microsoft.Office.Interop.Excel 또는 EPPlus가 큰 Excel 파일을 읽음
private List<string> bd = new List<string>();
private static System.Array objRowAValues;
private List<string> bl = new List<string>();
private static System.Array objRowBValues;
private List<string> cm = new List<string>();
private static System.Array objRowCValues;
private List<string> pl = new List<string>();
private List<string> bdCleanList;
private static Microsoft.Office.Interop.Excel.Application appExcel;
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range rngARowLast, rngBRowLast, rngCRowLast;
long lastACell, lastBCell, lastCCell, fullRow;
private void btnCargarExcel_Click(object sender, EventArgs e)
{
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
if (System.IO.File.Exists(openFileDialog1.FileName))
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
filePath.Text = openFileDialog1.FileName.ToString();
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(openFileDialog1.FileName, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false,
false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
fullRow = xlWorkSheet.Rows.Count;
lastACell = xlWorkSheet.Cells[fullRow, 1].End(Excel.XlDirection.xlUp).Row;
rngARowLast = xlWorkSheet.get_Range("A1", "A" + lastACell);
objRowAValues = (System.Array)rngARowLast.Cells.Value;
foreach (object elem in objRowAValues)
{
if (elem != "")
{
bd.Add(cleanString(elem.ToString(), 10));
}
}
nrosProcesados.Text = bd.Count().ToString();
listBox1.DataSource = bd;
xlWorkBook.Close(true, null, null);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
executiontime.Text =
String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds/10).ToString();
}
else
{
MessageBox.Show("No se pudo abrir el fichero!");
System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel);
appExcel = null;
System.Windows.Forms.Application.Exit();
}
}
}
나는 ~ 800 000 개의 셀을 가진 Excel 파일로 테스트하고 2 분 이내에 끝내기 만합니다. 그런 다음 EPPlus에서 샘플을 테스트하고 내 접근 방식보다 빠르기 때문에 Microsoft 대신 EPPlus를 사용하는 것으로 생각합니다 .Office.Interop.Excel OpenXML SDK를 사용하는 것으로 생각합니다 (그러나 내 목표로 스위트 룸을 찾을 수는 없습니다. 지금). 그들이 여기 LINQ를 사용 물론
ExcelWorksheet sheet = package.Workbook.Worksheets[1];
var query1= (from cell in sheet.Cells["d:d"] where cell.Value is double && (double)cell.Value >= 9990 && (double)cell.Value <= 10000 select cell);
하지만이 주제에 대한 내 질문은 다음과 같습니다 : 예에서 그들은 Excel 파일에서 읽을이 코드를 사용
- 어떤 방법 당신이 사용 했습니까?
- 이것에 대한 권장 사항은 무엇입니까?
- EPPlus 또는 OpenXML SDK를 사용하여 동일한 내용을 작성하는 데 도움이 필요합니까?
나는 C#을 세계에서 초보자는 PHP 세계에서오고 이것은 내 첫 번째 프로젝트
덕분에, 나는 모든 샘플 코드를 확인하고 나를 내가 물어 그것을 위해 EPPlus를 사용하여 동일한을 얻기 위해 따라야 단계를 이해하기에 충분하지 않습니다 여기에서 도움이 필요하면 Excel에서 셀을 읽고 System.Array에 쓰는 것과 동일한 논리가 필요한지 모르겠습니다. – Reynier
이것은 셀 위로 반복하는 방법입니다. http://codealoc.wordpress.com/2012/04/19/reading-an-excel-xlsx-file-from-c/ – AaronLS
다른 예제로 업데이트되었습니다. 또한 EPPlus에는 범위 기능이있어 사용자에게 도움이 될 수 있습니다. – AaronLS