Транспонирование Excel через vbscript

У меня есть электронная таблица Excel, которую я экспортировал из какой-то другой программы.

В нем есть строки, окрашенные в зависимости от нескольких бизнес-условий.

Теперь мне нужно перенести весь лист Excel вместе с цветами и форматированием.

Обратите внимание, что я должен сделать это, используя только Vbscript.

Это код, который я написал до сих пор, но он транспонируется без форматирования:

 sub transpose
 On Error Resume Next
 Set objExcel = CreateObject("Excel.Application")
 objExcel.Visible = False
 objExcel.Workbooks.Add()
 set table = ActiveDocument.GetSheetObject( "CH01" )
 CellRect = ActiveDocument.GetApplication().GetEmptyRect()
 CellRect.Top = 0
 CellRect.Left = 0
 CellRect.Width = table.GetColumnCount
 CellRect.Height = table.GetRowCount
 set CellMatrix = table.GetCells( CellRect )
 for RowIter=CellRect.Top to CellRect.Width-1
   for ColIter=CellRect.Left to CellRect.Height-1
     ObjExcel.Cells(RowIter+1, ColIter+1).Value = CellMatrix(ColIter)(RowIter).Text
    'msgbox(CellMatrix(ColIter)(RowIter).Text)
   next
 next
 objExcel.ActiveWorkbook.SaveAs("C:\Documents and    Settings\prasanna\Desktop\test3.xls")
 objExcel.Application.Workbooks.Open("C:\Documents and           Settings\prasanna\Desktop\test3.xls")
 objExcel.Application.Visible = True
 objExcel = Nothing
 end sub

person user1472309    schedule 21.06.2012    source источник
comment
Во-первых, объясните нам, почему вы можете использовать только VBScript (вы уверены, что не путаете с VBA?). Во-вторых, покажите нам что вы уже пробовали и где вы застряли, чтобы мы могли вам помочь. Как уже говорилось, ваш вопрос никуда не ведет   -  person JMax    schedule 21.06.2012
comment
Я должен использовать vbscript только потому, что инструмент, о котором я говорю, позволяет мне использовать только Vbscript.   -  person user1472309    schedule 22.06.2012
comment
Вы уверены, что не имеете в виду VBA? Версия Visual Basic, встроенная в Excel? VBScript не является частью Excel.   -  person Orbling    schedule 22.06.2012


Ответы (1)


Уф.., это стоило некоторого времени и экспериментов, вот рабочее решение для офиса 2012

const xlPasteValuesAndNumberFormats = 12 'doesn't work with Excel 2010 ?
const xlFormats =-4122
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = false

если у вас уже есть целевой xls, вы можете пропустить эти строки

Set wbkDest = objExcel.Workbooks.Add
wbkDest.saveAs "c:\test2.xls"
wbkDest.close

и продолжай здесь

Set objWorkbook1= objExcel.Workbooks.Open("C:\test1.xls")
Set objWorkbook2= objExcel.Workbooks.Open("C:\test2.xls")
objWorkbook1.Worksheets("Sheet1").UsedRange.Copy
'we have to do the paste twice, once for the values, once for the formats
objWorkbook2.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
objWorkbook2.Worksheets("Sheet1").Range("A1").PasteSpecial xlFormats
objWorkbook1.save
objWorkbook2.save
objWorkbook1.close
objWorkbook2.close
set objExcel=nothing
person peter    schedule 22.06.2012
comment
Процедура PasteSpecial имеет параметр Transpose, который будет означать, что транспонирование произойдет при вставке. - person ; 25.06.2012
comment
Большое вам спасибо, это сделало то, что я хотел ... Это поможет gr8, если вы сообщите мне, как вы нашли значение -4122. - person user1472309; 26.06.2012
comment
@ user1472309: я записываю макрос, а затем перевожу его в vbscript. чтобы получить значения констант, вы выполняете поиск в Google, например, const xlformats. Не могли бы вы принять ответ? - person peter; 26.06.2012