Чтение и запись файлов Excel C#
Есть ли простая в реализации библиотека, которая может быть использована для чтения файлов excel и может быть создана позже?
это мой лучший выбор?
10 ответов:
Если вы хотите посвятить себя более поздней версии Excel (2007+), вы также можете взглянуть на OpenXML SDK. Это бесплатно, не привязывает вас к тому, что MS Office установлен на машине, на которой он будет работать, и есть довольно много доступных ресурсов о том, как использовать его онлайн (включая блоги из команды OpenXML).
Попробуйте это: http://epplus.codeplex.com
EPPlus-это библиотека .net, которая читает и записывает файлы Excel 2007/2010 использование формата Open Office Xml (xlsx).
Вы можете использовать ExcelLibrary , хотя это работает для .только xls, который имеет формат 2003
Цель этого проекта-предоставить собственное решение .NET для создания, чтения и изменения файлов Excel без использования COM-взаимодействия или OLEDB-соединения.
У меня был шанс использовать EPPLUS ,это было замечательно :) ,он работает для нового формата excel .xlsx, который используется в 2007/2010
EPPlus-это библиотека .net, вы можете читать и записывать файлы excel, создавать диаграммы ,картинки, фигуры... и многое другое
Также взгляните на это так что пост
Я использовал oledb, interop и только начал использовать Epplus. Пока что эпплус оказывается самым простым. http://epplus.codeplex.com/
Тем не менее, я только что опубликовал проблему, которую я имею с epplus, но я опубликовал некоторый код, который вы могли бы использовать в качестве ссылки.
Компания, в которой я работал, провела много исследований по этому вопросу и решила, что продукт SoftArtisans был их лучшим выбором: OfficeWriter
Мне всегда казалось странным, насколько слабой была поддержка чтения и записи Excel. Я уверен, что если вы используете библиотеки Microsoft, вам все равно придется установить Excel, что является дополнительным расходом, как и OfficeWriter.
Вы можете либо перейти на VBA, либо использовать бесплатную библиотеку из FileHelpers. Если вы планируете купить некоторые коммерческие решения, я бы рекомендовал ASPOSE
Согласно этому веб-сайту необходимо включить ссылку на библиотеку объектов Microsoft Excel 12.0. Оттуда вам нужно сделать несколько вещей, чтобы открыть файл. На веб-сайте есть образец кода.
PS-Извините, что это не слишком подробно, но я не смог найти ссылку разработчика Microsoft Office с более подробной информацией.
Я использовал ExcelLibrary с очень большими результатами! (до сих пор он поддерживает Excel 2003 или более низкие версии).
Я ExcelDataReader для чтения и вышеупомянутый EPPlus для написания. Вот пример.
Вот пример чтения с ним:
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); // Reading from a binary Excel file ('97-2003 format; *.xls) // IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); // Reading from a OpenXml Excel file (2007 format; *.xlsx) IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); // DataSet - The result of each spreadsheet will be created in the result.Tables DataSet result = excelReader.AsDataSet(); // Free resources (IExcelDataReader is IDisposable) excelReader.Close(); var cdm = new ValueSetRepository(); for (int i = 0; i < result.Tables.Count; i++) { // CHECK if tableNames filtering is specified if (tableNames != null) { // CHECK if a table matches the specified tablenames var tablename = result.Tables[i].TableName; if (!tableNames.Contains(tablename)) { continue; } } var lookup = new ValueSetLookup(); lookup.CmsId = result.Tables[i].Rows[2][0].ToString(); lookup.NqfNumber = result.Tables[i].Rows[2][1].ToString(); lookup.Data = new List<ValueSetAttribute>(); int row_no = 2; while (row_no < result.Tables[i].Rows.Count) // i is the index of table // (sheet name) which you want to convert to csv { var currRow = result.Tables[i].Rows[row_no]; var valueSetAttribute = new ValueSetAttribute() { Id = currRow[0].ToString(), Number = currRow[1].ToString(), tName = currRow[2].ToString(), Code = currRow[7].ToString(), Description = currRow[8].ToString(), }; lookup.Data.Add(valueSetAttribute); row_no++; } cdm.AddRecord(lookup);
Comments