Я использую OleDb для чтения из книги Excel с большим количеством листов.
Мне нужно прочитать имена листов, но они мне нужны в том порядке, в котором они определены в электронной таблице; Итак, если у меня есть файл, который выглядит так:
|_____|_____|____|____|____|____|____|____|____|
|_____|_____|____|____|____|____|____|____|____|
|_____|_____|____|____|____|____|____|____|____|
\__GERMANY__/\__UK__/\__IRELAND__/
Тогда мне нужен словарь
1="GERMANY",
2="UK",
3="IRELAND"
Я пробовал использовать OleDbConnection.GetOleDbSchemaTable()
, и это дает мне список имен, но он сортирует их по алфавиту. Альфа-сортировка означает, что я не знаю, какому номеру листа соответствует конкретное имя. Итак, я понял;
GERMANY, IRELAND, UK
который изменил порядок UK
и IRELAND
.
Причина, по которой мне нужно его отсортировать, заключается в том, что я должен позволить пользователю выбирать диапазон данных по имени или индексу; они могут запросить «все данные из ГЕРМАНИИ в ИРЛАНДИЮ» или «данные с листа 1 на лист 3».
Любые идеи очень приветствуются.
если бы я мог использовать классы взаимодействия с офисом, это было бы просто. К сожалению, я не могу этого сделать, потому что классы взаимодействия не работают надежно в неинтерактивных средах, таких как службы Windows и сайты ASP.NET, поэтому мне пришлось использовать OLEDB.
источник
Ответы:
Не могу найти это в реальной документации MSDN, но модератор на форумах сказал
Имена листов Excel в порядке листов
Похоже, это было бы достаточно распространенным требованием, чтобы найти достойный обходной путь.
источник
Не могли бы вы просто пролистать листы от 0 до Счетчика имен -1? таким образом вы должны получить их в правильном порядке.
редактировать
В комментариях я заметил, что есть много опасений по поводу использования классов Interop для получения имен листов. Поэтому вот пример использования OLEDB для их получения:
Выдержка из статьи о CodeProject.
источник
Поскольку приведенный выше код не охватывает процедуры извлечения списка имен листов для Excel 2007, следующий код будет применим как для Excel (97-2003), так и для Excel 2007:
Вышеупомянутая функция возвращает список листов в конкретном файле Excel для обоих типов Excel (97,2003,2007).
источник
Это коротко, быстро, безопасно и удобно ...
источник
exceladdress
- что это?По-другому:
Файл xls (x) - это просто набор файлов * .xml, хранящихся в контейнере * .zip. разархивируйте файл «app.xml» в папку docProps.
Это файл на немецком языке (Arbeitsblätter = рабочие листы). Имена таблиц (Tabelle3 и т. Д.) Расположены в правильном порядке. Вам просто нужно прочитать эти теги;)
С уважением
источник
Я создал приведенную ниже функцию, используя информацию, предоставленную в ответе от @kraeppy ( https://stackoverflow.com/a/19930386/2617732 ). Для этого требуется .net framework v4.5 и ссылка на System.IO.Compression. Это работает только для файлов xlsx, но не для старых файлов xls.
источник
Мне нравится идея @deathApril называть листы как 1_Germany, 2_UK, 3_IRELAND. У меня также возникла ваша проблема с переименованием сотен листов. Если у вас нет проблем с переименованием имени листа, вы можете использовать этот макрос, чтобы сделать это за вас. Переименование всех имен листов займет меньше секунды. к сожалению, ODBC, OLEDB возвращают порядок имен листов по возрастанию. Этому нет замены. Вы должны либо использовать COM, либо переименовать свое имя, чтобы оно было в порядке.
ОБНОВЛЕНИЕ: после прочтения комментария @SidHoland относительно BIFF возникла идея. Следующие шаги можно выполнить с помощью кода. Не знаю, действительно ли вы хотите сделать это, чтобы имена листов располагались в том же порядке. Дайте мне знать, если вам понадобится помощь в этом с помощью кода.
ОБНОВЛЕНИЕ: другое решение - NPOI может быть здесь полезно http://npoi.codeplex.com/
Это решение работает для xls. Xlsx не пробовал.
Спасибо,
Esen
источник
Это сработало для меня. Украдено отсюда: как получить имя первой страницы книги Excel?
источник
Попробуй это. Вот код для упорядочивания имен листов.
источник
Excel.XlFileFormat.xlWorkbookNormal
)Согласно MSDN, в случае электронных таблиц внутри Excel это может не работать, потому что файлы Excel не являются настоящими базами данных. Таким образом, вы не сможете получить названия листов в порядке их отображения в книге.
Код для получения имен листов в соответствии с их внешним видом с помощью взаимодействия:
Добавить ссылку на библиотеку объектов Microsoft Excel 12.0.
Следующий код даст имена листов в фактическом порядке, хранящемся в книге, а не отсортированное имя.
Образец кода:
источник
Я не вижу никакой документации, в которой говорится, что порядок в app.xml гарантированно соответствует порядку листов. ВЕРОЯТНО, но не в соответствии со спецификацией OOXML.
С другой стороны, файл workbook.xml включает атрибут sheetId, который действительно определяет последовательность - от 1 до количества листов. Это соответствует спецификации OOXML. workbook.xml описывается как место, где хранится последовательность листов.
Поэтому я рекомендую прочитать файл workbook.xml после его извлечения из XLSX. НЕ app.xml. Вместо docProps / app.xml используйте xl / workbook.xml и посмотрите на элемент, как показано здесь -
`
`
источник