Чтение файлов Excel от C#

Ну, на самом деле вам нужно будет возвратить что-то вроде этого, потому что toString должно возвращать строку

public String toString() {
 return "Name :" + this.name + "whatever :" + this.whatever + "";
}

, и вы действительно делаете что-то не так в конструкторе, который вы задали переменной, которую пользователь установил для имени, в то время как вам нужно сделать обратное. Что вам не следует делать

n = this.name

Что вы должны делать

this.name = n

Надеюсь, это поможет благодаря

233
задан Chris 26 September 2008 в 18:42
поделиться

22 ответа

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"];

Это - то, что я обычно использую. Это немного отличается, потому что я обычно засовываю AsEnumerable () при редактировании таблиц:

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"),
                    });
153
ответ дан Robin Robinson 4 November 2019 в 13:07
поделиться

Просто сделал быстрый демонстрационный проект, который потребовал управления некоторыми файлами Excel. Компонент.NET из программного обеспечения GemBox был достаточен для моих потребностей. Это имеет бесплатную версию с несколькими ограничениями.

http://www.gemboxsoftware.com/GBSpreadsheet.htm

1
ответ дан Christian Hagelid 4 November 2019 в 13:07
поделиться

Я знаю, что люди делали Excel "расширением" с этой целью.
Вы более или менее делаете кнопку в Excel, который говорит "Экспорт в Программу X", и затем экспортируйте и отошлите данные в формате, который может считать программа.

http://msdn.microsoft.com/en-us/library/ms186213.aspx должен быть хорошим местом для запуска.

Удача

1
ответ дан Lars Mæhlum 4 November 2019 в 13:07
поделиться

Вы могли записать электронную таблицу Excel, которая загружает данную электронную таблицу Excel и сохраняет ее как csv (вместо того, чтобы делать ее вручную).

тогда Вы могли автоматизировать это от c#.

и однажды в csv, c# программа может grok это.

(также, если кто-то спрашивает Вас к программе в Excel, лучше притворяться, что Вы не знаете, как)

(отредактируйте: ах да, ограбьте, и ryan являются оба правильными)

1
ответ дан Leon Bambrick 4 November 2019 в 13:07
поделиться

Koogra является компонентом с открытым исходным кодом, записанным в C#, который читает и пишет файлы Excel.

15
ответ дан 2 revs 4 November 2019 в 13:07
поделиться

Я рекомендую Библиотеку FileHelpers, которая является свободной и простой в использовании библиотекой.NET для импортирования/экспортирования данных из EXCEL, фиксированной длины или разграниченных записей в файлах, строках или потоках + Больше.

http://filehelpers.sourceforge.net/example_exceldatalink.html Excel Data Link Documentation Section

2
ответ дан Jason Von Ruden 4 November 2019 в 13:07
поделиться

SpreadsheetGear для.NET является Excel совместимый компонент электронной таблицы для.NET. Вы видите то, что наши клиенты говорят о производительности на правой стороне нашего страница продукта . Можно попробовать его сами свободным, полностью функциональным оценка .

3
ответ дан Joe Erickson 4 November 2019 в 13:07
поделиться

В последнее время, частично для поправлений в LINQ.... Я использовал API автоматизации Excel, чтобы сохранить файл как электронную таблицу XML и затем получить процесс что файл с помощью LINQ для XML.

3
ответ дан kenny 4 November 2019 в 13:07
поделиться

Простите мне, если я являюсь неосновным здесь, но не являюсь этим, для чего PIA's Office ?

3
ответ дан Rob Cooper 4 November 2019 в 13:07
поделиться

Не свободный, но с последним Office существует очень хорошая автоматизация.Net API. (был API долгое время, но был противным COM), можно сделать все, что Вы хотите / потребность в коде все, в то время как приложение Office остается скрытым фоновым процессом.

4
ответ дан xanadont 4 November 2019 в 13:07
поделиться

Я сделал большое чтение из файлов Excel в C# только что, и мы использовали два подхода:

  • API COM, где Вы получаете доступ к объектам Excel непосредственно и управляете ими через методы и свойства
  • драйвер ODBC, который позволяет использовать Excel как база данных.

последний подход был очень быстрее: чтение большой таблицы с 20 столбцами и 200 строк заняло бы 30 секунд через COM, и половина секунды через ODBC. Таким образом, я рекомендовал бы подход базы данных, если все, в чем Вы нуждаетесь, является данными.

С наилучшими пожеланиями,

Carl

8
ответ дан Carl Seleborg 4 November 2019 в 13:07
поделиться

В то время как Вы действительно конкретно просили .xls, подразумевая более старые форматы файлов, форматы OpenXML (например, xlsx), я настоятельно рекомендую OpenXML SDK ( http://msdn.microsoft.com/en-us/library/bb448854.aspx )

12
ответ дан Hafthor 4 November 2019 в 13:07
поделиться

Это - то, что я использовал для 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);
    }
}
22
ответ дан Dmitry Shechtman 4 November 2019 в 13:07
поделиться

Если это - просто простые данные, содержавшиеся в файле Excel, можно считать данные с помощью ADO.NET. См. строки подключения, перечисленные здесь:

http://www.connectionstrings.com/?carrier=excel2007 или http://www.connectionstrings.com/?carrier=excel

Обновление-Ryan

: тогда можно просто прочитать рабочий лист через что-то как select * from [Sheet1$]

83
ответ дан 2 revs 4 November 2019 в 13:07
поделиться

Подход ADO.NET быстр и легок, но он имеет несколько причуд, о которых необходимо знать, особенно относительно того, как обрабатываются DataTypes.

Эта превосходная статья поможет Вам избежать некоторых распространенных ошибок: http://blog.lab49.com/archives/196

27
ответ дан Ian Nelson 4 November 2019 в 13:07
поделиться

Вот некоторый код, который я записал в 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;
        }
    }
}
16
ответ дан hitec 4 November 2019 в 13:07
поделиться

ExcelMapper - это инструмент с открытым исходным кодом ( http://code.google.com/p/excelmapper/ ), который можно использовать для чтения листов Excel как строго типизированных объектов. , Он поддерживает форматы xls и xlsx.

6
ответ дан 23 November 2019 в 03:32
поделиться

Я только что использовал ExcelLibrary для загрузки электронной таблицы .xls в DataSet. У меня отлично сработало.

0
ответ дан 23 November 2019 в 03:32
поделиться

Пакет Excel - это компонент с открытым исходным кодом (GPL) для чтения / записи файлов Excel 2007. Я использовал его в небольшом проекте, и API прост. Работает только с XLSX (Excel 200 и), но не с XLS.

Исходный код также кажется хорошо организованным и легким в использовании (если вам нужно расширить функциональность или исправить мелкие проблемы, как я).

Сначала , Я попробовал подход ADO.Net (строка подключения Excel),

1
ответ дан 23 November 2019 в 03:32
поделиться

SmartXLS is another excel spreadsheet component which support most features of excel Charts,formulas engines, and can read/write the excel2007 openxml format.

3
ответ дан 23 November 2019 в 03:32
поделиться

Вы можете попробовать использовать это решение с открытым исходным кодом, которое значительно упрощает работу с Excel. .

http://excelwrapperdotnet.codeplex.com/

2
ответ дан 23 November 2019 в 03:32
поделиться

SpreadsheetGear — это круто. Да, это дорого, но по сравнению с другими решениями это того стоит. Это быстро, надежно, очень всесторонне, и я должен сказать, что после полутора лет использования этого продукта в моей полной работе по программному обеспечению их поддержка клиентов просто фантастическая!

2
ответ дан 23 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: