Excel Data Reader (이전에 here 호스트)을 codeplex의 오픈 소스 프로젝트로 사용하는 것은 어떻습니까? Excel 시트에서 데이터를 내보내는 것이 효과적입니다. 지정된 링크를 제공
샘플 코드 :
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//...
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//...
//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//...
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
//5. Data Reader methods
while (excelReader.Read())
{
//excelReader.GetInt32(0);
}
//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
UPDATE 주변의 일부 검색 후
, 나는이 기사를 건너 왔어요 : Faster MS Excel Reading using Office Interop Assemblies. 이 기사에서는 Office Interop Assemblies
을 사용하여 주어진 Excel 시트의 데이터를 읽습니다. 소스 코드가 프로젝트에 있습니다. 나는이 기사가 당신이 성취하고자하는 것에 대한 출발점이 될 수 있다고 생각한다. 즉, excel workbook
내부의 각 excel worksheet
를 들어, 발견 된 모든 값을
가 UPDATE 2
코드는 아래 excel workbook
소요 데 도움이 읽는 경우를 참조하십시오. 위의 코드에서
private static void TestExcel()
{
ApplicationClass app = new ApplicationClass();
Workbook book = null;
Range range = null;
try
{
app.Visible = false;
app.ScreenUpdating = false;
app.DisplayAlerts = false;
string execPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
book = app.Workbooks.Open(@"C:\data.xls", Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value);
foreach (Worksheet sheet in book.Worksheets)
{
Console.WriteLine(@"Values for Sheet "+sheet.Index);
// get a range to work with
range = sheet.get_Range("A1", Missing.Value);
// get the end of values to the right (will stop at the first empty cell)
range = range.get_End(XlDirection.xlToRight);
// get the end of values toward the bottom, looking in the last column (will stop at first empty cell)
range = range.get_End(XlDirection.xlDown);
// get the address of the bottom, right cell
string downAddress = range.get_Address(
false, false, XlReferenceStyle.xlA1,
Type.Missing, Type.Missing);
// Get the range, then values from a1
range = sheet.get_Range("A1", downAddress);
object[,] values = (object[,]) range.Value2;
// View the values
Console.Write("\t");
Console.WriteLine();
for (int i = 1; i <= values.GetLength(0); i++)
{
for (int j = 1; j <= values.GetLength(1); j++)
{
Console.Write("{0}\t", values[i, j]);
}
Console.WriteLine();
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
finally
{
range = null;
if (book != null)
book.Close(false, Missing.Value, Missing.Value);
book = null;
if (app != null)
app.Quit();
app = null;
}
}
,
values[i, j]
당신이
dataset
에 추가 할 필요가있는 값입니다.
i
은 행을 나타내지 만
j
은 열을 나타냅니다.
현상금을 추가. Excel 파일 내용에 대한 사전 지식없이 누구나 가능한 한 자동으로 데이터를 얻을 수 있다면 현상금을 수여 할 것입니다. –
미리 데이터에 대해 보증 할 수 있습니다. 내가 두려워하는 것은 오래된 통합 문서가 들어가서 테이블 형식의 데이터를 가져올 수있는 무언가를 원한다는 것입니다. 이 표의 데이터는 명명 된 범위로 구분되어야하거나 일종의 규칙을 따라야합니다. 컨벤션을 따랐다면 통합 문서의 모든 시트가 행 1에 헤더 행이있는 레코드 집합과 똑같이 보입니다. 그렇지 않으면 운이 없게 될 것입니다 ... – adamleerich