istudent Ответов: 1

Как выбрать и создать excel из excel, фильтруя данные в C#


Я пытаюсь отфильтровать данные и создать новый файл excel из коллекции файлов excel, которая находится в моем каталоге. В настоящее время я использую команду OLEDB и сталкиваюсь с несоответствием типа данных ошибки. Я хотел бы знать, можно ли это сделать с помощью epplus или нет, и если да, то, пожалуйста, поделитесь кодом.

Что я уже пробовал:

using (var xlConn = new OleDbConnection(cs))
                {
                    xlConn.Open();
                    dtXlSchema = xlConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                    for (int i = 0; i < dtXlSchema.Rows.Count; i++)
                    {
                        string sTableName = dtXlSchema.Rows[i]["Table_Name"].ToString();
                        string query ="Select [cs-uri-stem] from [" + sTableName + "] where ([cs-uri-stem] like '%" + kw + "%' and [sc-status] = '" + stat + "') Order by [cs-uri-stem]";
                            
                        
                        using (var cmd = new OleDbCommand(query, xlConn))
                        {
                            var rdr = cmd.ExecuteReader();

                            while (rdr.Read())
                            {
                                var row = dt.NewRow();
                                row["cs-uri-stem"] = rdr["cs-uri-stem"].ToString();
                                dtx.Rows.Add(row);
                            }
                        }
                    }

Richard MacCutchan

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

istudent

Но это все, что есть в Кодексе. Чтение данных из одного файла excel. Вот ключ свойств соединения="OleDBProvider" значение= "Microsoft.ACE.OLEDB.12.0"
key="ExtendedProperties" value=" 'Excel 12.0;HDR=Yes;IMEX=1'"

istudent

хорошо, я изменяю значение расширенных свойств="'Excel 8.0;HDR=Yes;IMEX=1'". И это сработало. Сообщение об ошибке было Мисс Лидинг. Однако я хотел бы научиться работать с другими библиотеками простым способом.

1 Ответов

Рейтинг:
1

Maciej Los

Цитата:
Я пытаюсь отфильтровать данные и создать новый файл excel из коллекции файлов excel, которая находится в моем каталоге. В настоящее время я использую команду OLEDB и сталкиваюсь с несоответствием типа данных ошибки. Я хотел бы знать, можно ли это сделать с помощью epplus или нет, и если да, то, пожалуйста, поделитесь кодом.


Что касается самого data type mismatch сообщение об ошибке...
Есть две причины, которые могут вызвать такую ошибку:
1. Распространенной причиной является, когда Excel не может преобразовать данные между типами данных...
Видеть: Несоответствие типов (ошибка 13) | Microsoft Docs[^]
2. Вы используете IMEX=1 в ExtendendProperties, который заставляет поставщика OledDb обрабатывать данные Excel как строку. Видеть: Строки подключения Microsoft ACE OLEDB 12.0 - ConnectionStrings.com[^]
Таким образом, когда вы пытаетесь установить значение ячейки/строки, которое отличается от строки, вы увидите такую ошибку.

Вывод:
Используйте отладчик, чтобы узнать строку, которая вызывает ошибку, чтобы иметь возможность исправить ее!

Что касается различных фреймворков/провайдеров (epplus и т. д.)...
Да, вы можете использовать его, но вы должны быть полностью уверены, что он обеспечит больше преимуществ, чем недостатков.