我在將Excel工作表導入到摘要工作簿時遇到問題。在類/對象中使用Excel對象(工作表,工作簿...)
首先,我嘗試導入數據,數據表,使用:
`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];
}
}
}
其次,我希望導入修復由VIA互操作導入它,所以我實現了這個一個:
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。高效代碼的性能也很好。 –