Работа с excell-ем из .NET
От: Аноним  
Дата: 09.06.04 11:57
Оценка:
Как можно работать с excell-ем из C#? в частности интересует как можно из excell-файла вытащить из каждой закладки DataTable с данными?
Re: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 09.06.04 12:48
Оценка:
> Как можно работать с excell-ем из C#? в частности интересует как
> можно из excell-файла вытащить из каждой закладки DataTable с
> данными?

Как идею могу предложить решение на VB:

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
Dim dset As New DataSet
Dim cmd1 As New System.Data.OleDb.OleDbCommand
Dim dadp As New System.Data.OleDb.OleDbDataAdapter
Dim dtbl As System.Data.DataTable = GetTables(ConExcelOleDb(TextBox1.Text))
For Each drow As DataRow In dtbl.Rows
Dim TabName As String = drow!Table_Name
With cmd1
.Connection = ConExcelOleDb(TextBox1.Text)
.CommandType = CommandType.Text
.CommandText = "SELECT * FROM [" & TabName & "]"
End With
With dadp
.SelectCommand = cmd1
Try
.Fill(dset, TabName)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End With
Next
DataGrid1.DataSource = dset
End Sub

Function ConExcelOleDb(ByVal strTextPath As String) As System.Data.OleDb.OleDbConnection
cnn = New System.Data.OleDb.OleDbConnection
Dim cmd1 As New System.Data.OleDb.OleDbCommand
Dim dadp As New System.Data.OleDb.OleDbDataAdapter
Dim dtbl As New System.Data.DataTable
With cnn
.ConnectionString = "provider=microsoft.jet.oledb.4.0;"
.ConnectionString &= "data source=" & strTextPath & ";"
.ConnectionString &= "Extended Properties = ""Excel 8.0"";"
End With
Return cnn
End Function

Public Function GetTables(ByVal conn As System.Data.OleDb.OleDbConnection) As System.Data.DataTable
Dim schemaTable As System.Data.DataTable
If conn Is Nothing Then
Return Nothing
End If
With conn
Try
If .State = ConnectionState.Closed Then .Open()
schemaTable = _
.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
.Close()
Return schemaTable
Catch ex As Exception
MessageBox.Show(ex.ToString)
Return Nothing
End Try
End With
End Function

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

Вобщем, данные удалось дастать через OledbConnection, как вы и писали, сначала возникла проблема смешения названия колонок и данных, то есть одни колонки назывались как им и положено F# (F с номером), а в наименования других запихивались почему-то данные из первой строки данных, но это удалось побороть добавлением в connectionString HDR=NO, то есть теперь connectionString имеет вид —
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + filePath + "; Jet OLEDB:Engine Type=5;"+
"Extended Properties=\"Excel 8.0;HDR=NO\""
Но теперь новая проблема открылась, данные из некоторой колонки пропадают и на их месте null, данные имеющие следующий вид
<--9166930615 остаются, а данные 89166316223 превращаются в DataTable в null, вопрос в том, как заставить считывать абсолютно все значения из любых колонок как строку? потому что есть подозрение, что OleDbDataAdapter при заполнении таблицы как-то некорректно их приводит к какому-то типу, который сам же и определеят
?????
Re[2]: Работа с excell-ем из .NET
От: komaz Россия  
Дата: 10.06.04 09:35
Оценка:
Добавив в Reference соответствующий com-объект, что-то там Microsoft.Office object library,
увидишь неймспейс Microsoft.Office.Interop.Excel, далее можно делать все следуя VBA-шному API
... << RSDN@Home 1.1.3 stable >>
Re: Работа с excell-ем из .NET
От: DanilND  
Дата: 10.06.04 09:57
Оценка:
Здравствуйте, Аноним, Вы писали:

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


Попробуйте в ячейке, где пишется выбранное поле таблицы (A1 и е.д.) набрать слово (будет имя табл. в DataSet)
После набора должна выделиться вся таблица. Потом я делал DSN (Data Source Name из Administrative Tools) для текущего файла xsl. Затем создавайте Сonnection из сгенерированного DSN и вперёд. В Server Explorer увидите Таблицу.
Re[3]: Работа с excell-ем из .NET
От: Аноним  
Дата: 10.06.04 10:15
Оценка:
Здравствуйте, komaz, Вы писали:

K>Добавив в Reference соответствующий com-объект, что-то там Microsoft.Office object library,

K>увидишь неймспейс Microsoft.Office.Interop.Excel, далее можно делать все следуя VBA-шному API
Зачем добалять Com, если я данные можно импортировать используя oleDB? у меняпроблема только с неправильной интерпритацией некоторых данных из ячеек, которые превоащаются в null, здесь мне com не поможет
Re[3]: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 10.06.04 10:34
Оценка:
komaz wrote:
> Добавив в Reference соответствующий com-объект, что-то там
> Microsoft.Office object library, увидишь неймспейс
> Microsoft.Office.Interop.Excel, далее можно делать все следуя
> VBA-шному API

А для чего, если использовать ADO.NET?

Peter
Posted via RSDN NNTP Server 1.8
Re[3]: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 10.06.04 10:42
Оценка:
> Здравствуйте, Peter Fleischer, Вы писали:
...
> Но теперь новая проблема открылась, данные из некоторой колонки
> пропадают и на их месте null, данные имеющие следующий вид
> <--9166930615 остаются, а данные 89166316223 превращаются в DataTable
> в null, вопрос в том, как заставить считывать абсолютно все значения
> из любых колонок как строку? потому что есть подозрение, что
> OleDbDataAdapter при заполнении таблицы как-то некорректно их
> приводит к какому-то типу, который сам же и определеят ?????

Это нормально, когда информация в таблицах неоднородная. Jet определяет тип столбца на основании первых ячеек столбца. Если ниже появляется содержание, не подвергающее безошибочным преборазованием, то просто пишется DBNull. Есле тебе это не нравится, то надо идти другими путями. Какими, звависит от общего решения и требуемых преобразований.

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

PF>Это нормально, когда информация в таблицах неоднородная. Jet определяет тип столбца на основании первых ячеек столбца. Если ниже появляется содержание, не подвергающее безошибочным преборазованием, то просто пишется DBNull. Есле тебе это не нравится, то надо идти другими путями. Какими, звависит от общего решения и требуемых преобразований.


PF>Peter

Я вижу два пути: 1 — попытаться как-то в SQL-запросе что-то такое написать, чтобы все данные в строку конвертились, но этого мне пока сделать не удалось в силу того, что запрос к xcl-файлу своеобразный и отличается от обычного запроса;
2 — попытаться воспользоваться OleDbDataReader-ом, пока не пробовал
Re[5]: Работа с excell-ем из .NET
От: Аноним  
Дата: 10.06.04 11:03
Оценка:
Здравствуйте, Аноним, Вы писали:

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


PF>>Это нормально, когда информация в таблицах неоднородная. Jet определяет тип столбца на основании первых ячеек столбца. Если ниже появляется содержание, не подвергающее безошибочным преборазованием, то просто пишется DBNull. Есле тебе это не нравится, то надо идти другими путями. Какими, звависит от общего решения и требуемых преобразований.


PF>>Peter

А>Я вижу два пути: 1 — попытаться как-то в SQL-запросе что-то такое написать, чтобы все данные в строку конвертились, но этого мне пока сделать не удалось в силу того, что запрос к xcl-файлу своеобразный и отличается от обычного запроса;
А>2 — попытаться воспользоваться OleDbDataReader-ом, пока не пробовал
сорри, xls-файл конечно же
Re[5]: Работа с excell-ем из .NET
От: Аноним  
Дата: 10.06.04 13:53
Оценка:
Здравствуйте, Аноним, Вы писали:

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

А>2 — попытаться воспользоваться OleDbDataReader-ом, пока не пробовал
Короче говоря, OleDbDataReader тоже не помог, данные из колонки, которые проподают, сразу после вызова reader.Read() равны dbNull, как это побороть не знаю, вобщем для нормального считывания данных из xsl-файла необходимо чтобы данные в ячейках одной колонки были однородными, если это условие не выполняется, то данные некоторого типа, не соответствующего типу колонки (а тип колонки определяется исходя не понятно из чего, даже не по данным, хранящимся в первой ячейке колонки, это проверялось ), превращаются в dbNull
Re[6]: Работа с excell-ем из .NET
От: Ved Украина  
Дата: 11.06.04 07:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Короче говоря, OleDbDataReader тоже не помог, данные из колонки, которые проподают, сразу после вызова reader.Read() равны dbNull, как это побороть не знаю, вобщем для нормального считывания данных из xsl-файла необходимо чтобы данные в ячейках одной колонки были однородными, если это условие не выполняется, то данные некоторого типа, не соответствующего типу колонки (а тип колонки определяется исходя не понятно из чего, даже не по данным, хранящимся в первой ячейке колонки, это проверялось ), превращаются в dbNull


Поищи по форуму — уже проскакивало, что для корректной работы с файлами Excel'я надо использовать автоматизацию Excel'я (делать на него ссылку, и потом использовать его методы). Медленно, зато все данные воспринимаются корректно, чего иной раз не происходит при использовании ADO.NET, Ole Db и пр.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[7]: Работа с excell-ем из .NET
От: Аноним  
Дата: 11.06.04 13:03
Оценка:
Здравствуйте, Ved, Вы писали:

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

Ved>Поищи по форуму — уже проскакивало, что для корректной работы с файлами Excel'я надо использовать автоматизацию Excel'я (делать на него ссылку, и потом использовать его методы). Медленно, зато все данные воспринимаются корректно, чего иной раз не происходит при использовании ADO.NET, Ole Db и пр.

это понятно, но не хотелось для несчастного импорта данных из файла использовать автоматизацию, это громоздко, долго, плюс привязка к excel-ю, то есть будет требоваться наличие установленного excel-я на машине
Re: Работа с excell-ем из .NET
От: Ransom Stark Россия  
Дата: 11.06.04 13:10
Оценка: 33 (4)
Здравствуйте, Аноним, Вы писали:

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

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

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

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

            return result;
        }

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

            return result;
        }

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

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

            return ds.Tables[0];
        }
Re[8]: Работа с excell-ем из .NET
От: Ved Украина  
Дата: 11.06.04 15:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

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


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

Ved>>Поищи по форуму — уже проскакивало, что для корректной работы с файлами Excel'я надо использовать автоматизацию Excel'я (делать на него ссылку, и потом использовать его методы). Медленно, зато все данные воспринимаются корректно, чего иной раз не происходит при использовании ADO.NET, Ole Db и пр.

А>это понятно, но не хотелось для несчастного импорта данных из файла использовать автоматизацию, это громоздко, долго, плюс привязка к excel-ю, то есть будет требоваться наличие установленного excel-я на машине


Мне тоже в свое время не хотелось, но как понадобилось импортировать прайсы всякие, то уж лучше медленно, чем с потерей большинства данных. Есть конечно еще метод, но это уж слишком — брать и писать свой парсер XLS-файлов...
... << Rsdn@Home 1.1.4 beta 1 >>
Re[9]: Работа с excell-ем из .NET
От: alku  
Дата: 11.06.04 16:10
Оценка:
Здравствуйте, Ved, Вы писали:

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


Ved>Мне тоже в свое время не хотелось, но как понадобилось импортировать прайсы всякие, то уж лучше медленно, чем с потерей большинства данных. Есть конечно еще метод, но это уж слишком — брать и писать свой парсер XLS-файлов...


смотрите Syncfusion.ExcelRw

это отдельная либа — работает без наличия екселя на машине. Умеет почти все что умеет ексель... правда цена оставляет желать лучшего...
Re[5]: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 12.06.04 07:42
Оценка:
> Здравствуйте, Peter Fleischer, Вы писали:
...
> Я вижу два пути: 1 — попытаться как-то в SQL-запросе что-то такое
> написать, чтобы все данные в строку конвертились, но этого мне пока
> сделать не удалось в силу того, что запрос к xcl-файлу своеобразный и
> отличается от обычного запроса; 2 — попытаться воспользоваться
> OleDbDataReader-ом, пока не пробовал

В SQL-запросы ты ничего не можешь делать.

OleDbDataReader тебе тоже не поможет.

Проблема в том, что Jet должна определить тип результирующего столбца. В екселе такой информации нет, поэтому Jet старается определить из первого найденного содержания тип столбца. Программно там никак нельзя воздействовать.

Если нельзя представить "чистые" таблицы, то имеются только два выхода: автоматизация Excel или представление таблицы в виде csv-file с последующей загрузкой в DataTable при использовании schema.ini. В обоих случаях можно брать содержание клетки как String и потом на собственное усмотрение проебразовать.

Peter
Posted via RSDN NNTP Server 1.8
Re[8]: Работа с excell-ем из .NET
От: Peter Fleischer Германия www.informtoools.de
Дата: 12.06.04 07:43
Оценка:
> Здравствуйте, Ved, Вы писали:
...
> это понятно, но не хотелось для несчастного импорта данных из файла
> использовать автоматизацию, это громоздко, долго, плюс привязка к
> excel-ю, то есть будет требоваться наличие установленного excel-я на
> машине

Тогда остается только путь через csv-file и schema.ini.

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

А>Зачем добалять Com, если я данные можно импортировать используя oleDB? у меняпроблема только с неправильной интерпритацией некоторых данных из ячеек, которые превоащаются в null, здесь мне com не поможет


F зачем вообще мучиться с Excel'ными файлами? Из предыдущего можно понять, что эти файлы приносятся откуда-то. В том числе на машины, на которых Excel нет. Тогда уж лучше приносить данные в каком-нить нормальном формате — CSV, XML и т.п.
А набитые руками (или без учёта типов данных) таблицы Excel при помощи OleDb импортировать нормально таки не получится. Только через COM.
Re[6]: Работа с excell-ем из .NET
От: Аноним  
Дата: 17.06.04 07:08
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

PF>Если нельзя представить "чистые" таблицы, то имеются только два выхода: автоматизация Excel или представление таблицы в виде csv-file с последующей загрузкой в DataTable при использовании schema.ini. В обоих случаях можно брать содержание клетки как String и потом на собственное усмотрение проебразовать.


а можно как-то по подробнее об schema.ini? что это такое? и как оным пользоваться?
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&amp;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...
Пока на собственное сообщение не было ответов, его можно удалить.