Re[2]: Работа с excell-ем из .NET
От: Аноним  
Дата: 17.06.04 07:11
Оценка:
Здравствуйте, Ransom Stark, Вы писали:

RS>Здравствуйте, Аноним, Вы писали:


А>>Как можно работать с excell-ем из C#? в частности интересует как можно из excell-файла вытащить из каждой закладки DataTable с данными?

RS>я делаю примерно так.
RS>
RS>        private const int SheetNumber = 0;

RS>        private static string GetConnectionString(string path)
RS>        {
RS>            return string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=No;IMEX=1""", path);
RS>        }

RS>        private static string GetSheetName(OleDbConnection connection)
RS>        {
RS>            System.Data.DataTable sheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]{null, null, null, "TABLE"});
RS>            string result = "[" + sheets.Rows[SheetNumber]["TABLE_NAME"].ToString() + "]";

RS>            return result;
RS>        }

RS>        private static OleDbCommand GetCommand(OleDbConnection connection)
RS>        {
RS>            string commandText = "SELECT * FROM " + GetSheetName(connection);
RS>            OleDbCommand result = new OleDbCommand(commandText, connection);

RS>            return result;
RS>        }

RS>        public static DataTable GetExcelTable(OleDbConnection connection)
RS>        {
RS>            connection.Open();
RS>            OleDbCommand command        = GetCommand(connection);
RS>            OleDbDataAdapter adapter    = new OleDbDataAdapter(command);

RS>            DataSet ds = new DataSet();
RS>            adapter.Fill(ds);

RS>            return ds.Tables[0];
RS>        }
RS>


можно-то можно, так и делается, только данные не всегда правильно интерпретируются, о чем собсно выше и написано
плюс данный код можно упростить, так как нет необходимости создавать DataSet в adapter.Fill можно и DataTable передавать
Re[7]: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 17.06.04 07:42
Оценка:
> Здравствуйте, Peter Fleischer, Вы писали:
>
> PF>Если нельзя представить "чистые" таблицы, то имеются только два
> выхода: автоматизация Excel или представление таблицы в виде csv-file
> с последующей загрузкой в DataTable при использовании schema.ini. В
> обоих случаях можно брать содержание клетки как String и потом на
> собственное усмотрение проебразовать.
>
> а можно как-то по подробнее об schema.ini? что это такое? и как оным
> пользоваться?

см.
ms-help://MS.MSDNQTR.2004APR.1033/odbc/htm/odbcjetschema_ini_file.htm

ODBC Drivers
Schema.ini File (Text File Driver)

в schema.ini можешь описать каждый столбец для импорта. Если используешь только текст, то потом сам можешь в своей программе "читсить" данные.

Peter
Posted via RSDN NNTP Server 1.8
Re[8]: Работа с excell-ем из .NET
От: Аноним  
Дата: 17.06.04 08:58
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

PF>см.

PF>ms-help://MS.MSDNQTR.2004APR.1033/odbc/htm/odbcjetschema_ini_file.htm

PF>ODBC Drivers

PF>Schema.ini File (Text File Driver)

PF>в schema.ini можешь описать каждый столбец для импорта. Если используешь только текст, то потом сам можешь в своей программе "читсить" данные.


PF>Peter


у меня нет MSDN-на 2004, у меня старенький, а пример того как schema.ini должна выглядеть и как потом используется хочется заиметь, так что может запостишь из этой статьи пример?
Re[9]: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 17.06.04 09:36
Оценка: 14 (1)
> Здравствуйте, Peter Fleischer, Вы писали:
...
> у меня нет MSDN-на 2004, у меня старенький, а пример того как
> schema.ini должна выглядеть и как потом используется хочется заиметь,
> так что может запостишь из этой статьи пример?

А что? Интернет у тебя не работает? Как же ты выходишь на rsdn?

Schema.ini File (Text File Driver) (Microsoft Open Database Connectivity (ODBC))
The Microsoft® Open Database Connectivity (ODBC) interface is a C programming language interface that makes it possible for applications to access data from a variety of database management systems (DBMSs).
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcjetschema_ini_file.asp

Other Text File Driver Programming Details (Microsoft Open Database Connectivity (ODBC))
The Microsoft® Open Database Connectivity (ODBC) interface is a C programming language interface that makes it possible for applications to access data from a variety of database management systems (DBMSs).
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcjetother_text_file_driver_programming_details.asp

149090 — ACC: How to Use Schema.ini for Accessing Text Data
This article show you how to use a Schema.ini file and Data Access Objects (DAO) to programmatically open or link to a text file. A Schema.ini file contains the specifics on how data is formatted in a particular text file and is used by the Text ISAM...
http://support.microsoft.com/default.aspx?scid=kb;en-us;149090

Peter
Posted via RSDN NNTP Server 1.8
Re[6]: Работа с excell-ем из .NET
От: AFedorov2 Россия  
Дата: 17.06.04 10:42
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

>> Здравствуйте, Peter Fleischer, Вы писали:

PF>...
>> Я вижу два пути: 1 — попытаться как-то в SQL-запросе что-то такое
>> написать, чтобы все данные в строку конвертились, но этого мне пока
>> сделать не удалось в силу того, что запрос к xcl-файлу своеобразный и
>> отличается от обычного запроса; 2 — попытаться воспользоваться
>> OleDbDataReader-ом, пока не пробовал

Есть три опробованных варианта.

1. Экспортировать данные в CVS.

2. Работать с Excel через PIA (primary interop assembly: http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en). Это наиболее гибкий, но тяжеловесный способ. Если на Office не установлен "Language Pack" для текущей локали, то у потока, работающего с Excel, нужно установить английскую локаль, иначе многие функции не будут работать.

CultureInfo oldCI = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );
try
{
}
finally
{
Thread.CurrentThread.CurrentCulture = oldCI;
}

Установка локали мне в основном помогла, но часть функций всёравно бросала такой же exception, что и до установки.

3. Обработать каждый XLS файл приведённым ниже макросом (выделить столбцы с данными и запустить макрос). В результате OLEDB провайдер будет распознавать данные как String, что даст возможность их распарсить самостоятельно ничего при этом не потеряв.

Public Sub SetAsText()

If Application.Selection Is Nothing Then
MsgBox "No columns are selected.", vbExclamation Or vbOKOnly, "Error"
Exit Sub
End If

Dim rngSel As Range: Set rngSel = Application.Selection
If rngSel.Columns.Count <> 1 Then
MsgBox "Select one column with prices.", vbExclamation Or vbOKOnly, "Error"
Exit Sub
Else
Dim i As Long, cntEmpty As Long: cntEmpty = 0
rngSel.Columns.EntireColumn.NumberFormat = "@"
With rngSel.Cells
For i = 1 To .Count
.Item(i).Value = CStr(.Item(i).Value)
If Len(.Item(i).Value) = 0 Then
cntEmpty = cntEmpty + 1
Else
cntEmpty = 0
End If

If cntEmpty > 10 Then Exit For
Next
End With

MsgBox "Column is updated.", vbInformation Or vbOKOnly, "Info"

End If
End Sub
Re[5]: Работа с excell-ем из .NET
От: trolik Россия  
Дата: 01.06.05 11:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я вижу два пути: 1 — попытаться как-то в SQL-запросе что-то такое написать, чтобы все данные в строку конвертились, но этого мне пока сделать не удалось в силу того, что запрос к xcl-файлу своеобразный и отличается от обычного запроса;

А>2 — попытаться воспользоваться OleDbDataReader-ом, пока не пробовал

Сталкивался с такой ерундой — решается очень просто. Надо добавить к свойствам строки коннекта параметр MaxScanRows=0. То есть строка коннекта выглядит примерно так:

private string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%FILEPATH%;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;MaxScanRows=0"""
Re: Работа с excell-ем из .NET
От: Demon_Astra  
Дата: 01.06.05 13:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как можно работать с excell-ем из C#? в частности интересует как можно из excell-файла вытащить из каждой закладки DataTable с данными?

у нас классная статейка есть, на http://www.pfsoft.com/new/book1.html
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.