【发布时间】:2016-11-29 21:15:40
【问题描述】:
我在将 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];
}
}
}
其次,我希望通过互操作导入来修复它,所以我实现了这个:
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
现在我已经没有办法解决这个问题了。 希望你能帮忙。
米尔科
【问题讨论】:
标签: c# excel visual-studio