У меня возникла проблема с импортом рабочих листов Excel в сводную рабочую книгу.использовать объекты Excel (рабочий лист, рабочие книги ...) в классах/объектах
Сначала я пытаюсь импортировать данные как DataTable, используя:
`Dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tableName = GetTableNames(Dt);
com = new OleDbDataAdapter(SqlQuery(tableName[0]), conn);
com.Fill(DtSet);
Dt = DtSet.Tables[0];`
работает отлично, за исключением того факта, что некоторые из заголовка заблудились, после копирования данных на новый лист:
private static void ImportData(DataTable source, string p)
{
int pos = Globals.ThisWorkbook.Sheets.Count;
object lastSheet = Globals.ThisWorkbook.Sheets.get_Item(pos);
Globals.ThisWorkbook.Sheets.Add(Type.Missing, lastSheet, Type.Missing, Type.Missing);
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;
ws.Name = p;
// column headings
for (var i = 0; i < source.Columns.Count; i++)
{
ws.Cells[1, i + 1] = source.Columns[i].ColumnName;
}
// rows
for (var i = 0; i < source.Rows.Count; i++)
{
// to do: format datetime values before printing
for (var j = 0; j < source.Columns.Count; j++)
{
ws.Cells[i + 2, j + 1] = source.Rows[i][j];
}
}
}
Во-вторых, я надеялся импортировать исправление, по его импорта через Interop так я реализовал этот один:
public Excel.Worksheet GetWorksheet(string path)
{
Excel.Application vApp = new Excel.Application();
Excel.Workbook vBook = vApp.Workbooks.Open(path);
Excel.Worksheet ws = vBook.Sheets.get_Item(1);
vBook.Close();
vApp.Quit();
return ws;
}
, кажется, работает также хорошо, пока я не пытаюсь скопировать этот лист в активной книге:
private static void ImportData(Excel.Worksheet source, string p)
{
int pos = Globals.ThisWorkbook.Sheets.Count;
source.Copy(Globals.ThisWorkbook.Worksheets[pos]);
}
это должно скопировать источник в последнюю позицию в Globals.ThisWorkbook
... но все, что я получил это COMException
Теперь у меня заканчиваются идеи, как это исправить. Надеюсь, вы сможете помочь.
Mirko
Thansk для вашего комментария, проблема в использовании внешних библиотек или программного обеспечения не разрешена в моей компании до утверждения. Программное обеспечение должно быть завершено в течение двух дней, принятие решения длится долго. :-) – Mirko
Да, я могу понять. Вы используете Microsoft.Interop.Excel? Я тоже это использовал. Наш продукт был размещен на облачном сервере, приобретенном клиентом. Мы не смогли убедить нашего клиента установить пакет Microsoft Office Primary Interop Assembly на сервере. Поэтому я использовал openXML и ClosedXML, что абсолютно бесплатно. Эффективность также была отличной с эффективным кодом. –