2010-06-10 5 views
1

У меня есть книга Excel, которую я использую в качестве шаблона отчета. Я изменяю источник данных на каждом шаге и datatable в приложении C#. Когда я изменяю datasable datasource, он tweeks колонки. Есть ли способ заставить порядок столбцов?Порядок столбцов Excel, таблица данных Excel

private void RefreshRawData(string dataSource, string connection) 
{ 
    xl._Worksheet ws = (xl._Worksheet)xlTemplate.Worksheets["Raw Data"]; 
    xl.ListObject table = ws.ListObjects["Table_ExternalData_1"]; 
    xl.QueryTable qt = table.QueryTable; 
    qt.CommandText = dataSource; 
    qt.Connection = GetExcelConnectionString((string)qt.Connection); 
    qt.BackgroundQuery = false; 
    qt.Refresh(m); 
    Marshal.ReleaseComObject(ws); 
    Marshal.ReleaseComObject(table); 
    Marshal.ReleaseComObject(qt); 
    ws = null; 
    table = null; 
    qt = null; 
} 

ответ

1

Добро пожаловать в дикий мир Interop.

Мне пришлось удалить и воссоздать таблицу.

Обратите внимание на аргументы в функции ListObject.Add Это нечетные существа.

private void RefreshRawData(string dataSource, string connection) 
{ 
    xl._Worksheet ws = (xl._Worksheet)xlTemplate.Worksheets["Raw Data"]; 
    xl.ListObject table = ws.ListObjects["Table_ExternalData_1"]; 
    xl.QueryTable qt = table.QueryTable; 
    string connStr = GetExcelConnectionString((string)qt.Connection); 
    table.Delete(); 
    xl.Range r = ws.get_Range("A1", "A1"); 
    table = ws.ListObjects.Add(xl.XlListObjectSourceType.xlSrcExternal, (object)connStr, m, xl.XlYesNoGuess.xlGuess, r); 
    qt = table.QueryTable; 
    qt.CommandType = xl.XlCmdType.xlCmdSql; 
    qt.CommandText = dataSource; 
    qt.RowNumbers = false; 
    qt.FillAdjacentFormulas = false; 
    qt.PreserveFormatting = true; 
    qt.RefreshOnFileOpen = false; 
    qt.BackgroundQuery = true; 
    qt.RefreshStyle = xl.XlCellInsertionMode.xlInsertDeleteCells; 
    qt.SavePassword = false; 
    qt.SaveData = true; 
    qt.AdjustColumnWidth = true; 
    qt.RefreshPeriod = 0; 
    qt.PreserveColumnInfo = true; 
    qt.ListObject.DisplayName = "Table_ExternalData_1"; 
    qt.Refresh(false); 
    Marshal.ReleaseComObject(ws); 
    Marshal.ReleaseComObject(table); 
    Marshal.ReleaseComObject(qt); 
    ws = null; 
    table = null; 
    qt = null; 
} 
Смежные вопросы