Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Чтение Excel файлов из C#
Есть ли свободная или открытая библиотека для чтения файлов Excel (.xls) непосредственно из программы C#?
Он не должен быть слишком причудливым, просто выберите лист и считайте данные в виде строк. До сих пор я использовал функцию Export to Unicode text из Excel и анализировал полученный файл (разделенный табуляцией), но я хотел бы исключить ручной шаг.
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"];
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"),
});
Если это просто данные, содержащиеся в файле Excel, вы можете прочитать их через ADO.NET. См. строки подключения, перечисленные здесь:
http://www.connectionstrings.com/?перевозчик=excel2007 или http://www.connectionstrings.com/?перевозчик=excel
-Райан
Update: тогда вы можете просто прочитать рабочий лист через что-то вроде select * from [Sheet1$]
Подход ADO.NET быстр и прост, но у него есть несколько причуд, о которых вы должны знать, особенно в отношении того, как обрабатываются DataTypes.
Эта отличная статья поможет вам избежать некоторых распространенных подводных камней: http://blog.lab49.com/archives/196
Это то, что я использовал для 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);
}
}
Как насчет Excel Data Reader?
http://exceldatareader.codeplex.com/
Я использовал в нем гнев, в производственной среде, чтобы вытащить большие объемы данных из множества файлов Excel в SQL Server Compact. Он работает очень хорошо и довольно надежен.
Вот код, который я написал в 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;
}
}
}
Хотя вы конкретно просили .xls, подразумевая более старые форматы файлов, для форматов OpenXML (например, xlsx) я настоятельно рекомендую OpenXML SDK ( http://msdn.microsoft.com/en-us/library/bb448854.aspx )
Некоторое время назад я много читал из Excel файлов в C#, и мы использовали два подхода:
- COM API, где вы получаете прямой доступ к объектам Excel и управляете ими с помощью методов и свойств
- Драйвер ODBC, который позволяет использовать Excel как базу данных.
Последний подход был гораздо быстрее: чтение большой таблицы с 20 столбцами и 200 строками заняло бы 30 секунд через COM и полсекунды через ODBC. Поэтому я бы рекомендовал подход к базе данных, если все, что вам нужно, - это данные.
Овации,
Карл
ExcelMapper-это инструмент с открытым исходным кодом (http://code.google.com/p/excelmapper/), который можно использовать для чтения листов Excel как строго типизированных объектов. Он поддерживает форматы XLS и XLSX.
Я хочу показать простой метод для чтения файла xls / xlsx .NET. Я надеюсь, что следующее будет полезно для вас.
private DataTable ReadExcelToTable(string path)
{
//Connection String
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
//the same name
//string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + //";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
using(OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
//Get All Sheets Name
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"});
//Get the First Sheet Name
string firstSheetName = sheetsName.Rows[0][2].ToString();
//Query String
string sql = string.Format("SELECT * FROM [{0}]",firstSheetName);
OleDbDataAdapter ada =new OleDbDataAdapter(sql,connstring);
DataSet set = new DataSet();
ada.Fill(set);
return set.Tables[0];
}
}
Код взят из статьи: http://www.c-sharpcorner.com/uploadfile/d2dcfc/read-excel-file-with-net/ . Вы можете получить более подробную информацию из него.
SpreadsheetGear для .NET является Excel совместимым компонентом электронной таблицы для .NET. Вы можете посмотреть, что наши клиенты говорят о производительности в правой части страницы нашего продукта . Вы можете попробовать это самостоятельно с помощью бесплатной, полнофункциональной оценки .
SpreadsheetGear-это потрясающе. Да, это расходы, но по сравнению с этими другими решениями, это стоит того. Это быстро, надежно, очень всесторонне, и я должен сказать, что после использования этого продукта в моей постоянной работе с программным обеспечением в течение более чем полутора лет, их клиентская поддержка фантастична!
Вы можете попробовать использовать это решение с открытым исходным кодом, которое делает работу с Excel намного более чистой.
http://excelwrapperdotnet.codeplex.com/
Решение, которое мы использовали, было необходимо для того, чтобы:
- Разрешить чтение / запись Excel созданных файлов
- Будьте быстры в исполнении (не так, как при использовании COMs)
- Быть независимым от MS Office (необходимо для использования без установленных клиентов MS Office)
- Быть свободным или открытым исходным кодом (но активно разрабатываемым)
Есть несколько вариантов, но мы нашли NPoi (.NET порт давно существующего Poi проекта с открытым исходным кодом Java), чтобы быть лучшим: http://npoi.codeplex.com/
Он также позволяет работать с форматами файлов .doc и .ppt
Я рекомендую библиотеку FileHelpers, которая является бесплатной и простой в использовании библиотекой .NET для импорта / экспорта данных из EXCEL, фиксированной длины или разделенных записей в файлах, строках или потоках + многое другое.
Excel Раздел Документации По Каналу Передачи Данных http://filehelpers.sourceforge.net/example_exceldatalink.html
Пакет Excel - это компонент с открытым исходным кодом (GPL) для чтения/записи файлов Excel 2007. Я использовал его в небольшом проекте, и API-это просто. Работает только с XLSX (Excel 200&), не с XLS.
Исходный код также кажется хорошо организованным и легким для обхода (если вам нужно расширить функциональность или исправить незначительные проблемы, как это сделал я).
Сначала я попробовал подход ADO.Net (Excel connection string), но он был чреват неприятными взломами-например, если вторая строка содержит число, она вернет ints для всех полей в столбце ниже и спокойно отбросит любые данные, которые не подходят.
вы можете написать таблицу excel, которая загружает заданную таблицу excel и сохраняет ее как csv (вместо того, чтобы делать это вручную).
тогда вы могли бы автоматизировать это с c#.
и как только он попадет в csv, программа c# сможет это сделать.
(кроме того, если кто-то попросит вас программировать в excel, лучше всего притвориться, что вы не знаете, как это делается)
(правка: Ах да, Роб и Райан оба правы)