How to Read xml spread sheet
У меня есть сторонний инструмент, который генерирует электронную таблицу XML (*.xls). У меня есть другая программа, которая читает эту таблицу и обрабатывает ее. Содержимое сгенерированной электронной таблицы xml представляет собой таблицу с 5 столбцами, и моя программа выполняет для них запросы на выборку. Я столкнулся с проблемой при открытии соединения с созданной электронной таблицей. Там написано "{" Внешняя таблица не в ожидаемом формате."}". Моя строка Connectin имеет вид "Provider=Microsoft.Jet.OLEDB.4.0; Источник данных =" + excelFileName + "; Расширенные свойства =\"Excel 8.0;HDR=YES;\""; Нужно ли что-нибудь изменить в этой строке? Я попытался использовать набор данных и вызвать dataSet.ReadXml(excelFileName); Но набор данных не содержит мою таблицу. Любые входные данные о том, как читать электронную таблицу XML?
Спасибо за ваше время, CS
2 ответа
Похоже, что ваша строка подключения установлена для более старых двоичных файлов формата Excel. Вы хотите другую строку подключения для XML. Если вы говорите о новых XML-файлах Excel 2007, то вам нужна строка подключения:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";
Если вы говорите о старом формате xml, который появился в Excel 2003, то я не уверен, что есть строка подключения. В этом случае лучше всего открыть в Excel, а затем сохранить как файл xls и использовать строку подключения, которую вы изначально использовали.
Кстати, http://www.connectionstrings.com/ - это отличное место, где можно найти любую старую строку подключения, которая может вам понадобиться для доступа ко всем различным типам данных.
Также обратите внимание, как другие заметили, что если это xml-файл, он не должен иметь расширение xls-файла, он должен быть либо.xml, либо.xlsx.
Excel.Workbook wb1;
Excel.Application wb2 = new Excel.Application();
wb2.DisplayAlerts = false;
wb1 = (Excel.Workbook)wb2.Workbooks._Open(filename);
if (wb1.FileFormat == Excel.XlFileFormat.xlXMLSpreadsheet)
{
wb1.SaveAs(filename, Excel.XlFileFormat.xlExcel12, Type.Missing, Type.Missing,
false, false, Excel.XlSaveAsAccessMode.xlNoChange,
Excel.XlSaveConflictResolution.xlOtherSessionChanges, false);
}
else
{
wb2.Workbooks.Close();
}
Вы можете преобразовать таблицу Excel в формат 2007, а затем использовать LinQ для запроса листов с помощью любого поставщика с открытым исходным кодом или OleDB.