как автоматически изменять размеры ячеек Excel при копировании данных с сервера SQL - PullRequest
4 голосов
/ 22 ноября 2011

Я экспортирую данные SQL в Excel с помощью хранимой процедуры. При открытии Excel несколько значений ячеек частично скрыты, я хочу изменить размер, включая заголовок ... и хочу, чтобы заголовок был смелее ... Пожалуйста, помогите мнерешить эту проблему ..

sql хранимая процедура:

alter procedure usp_example         
 (                
 @db_name varchar(100),                
 @schm_name varchar(100),                
 @table_name varchar(100),                 
 @file_name varchar(100)                
  )                
 as          


--Generate column names as a recordset                
  declare @columns varchar(8000), @sql varchar(8000) ,  
   @sql1 varchar(8000), @data_file varchar(100)           

   select                       
    @columns=coalesce(@columns+',','')+column_name+' as '+column_name                       
    from                       
    information_schema.columns                      
    where                       
    table_name=@table_name       

    select @columns=''''+replace(replace(@columns,' as ',''' as '),',',',''')                           


    --Create a dummy file to have actual data                
     select @data_file=substring(@file_name,1,len(@file_name)-              
     charindex('\',reverse(@file_name)))+'\data_file.csv'                


      --Generate column names in the passed EXCEL file                
       set @sql='bcp " select ''DATE'', *,''SHIFT'' ,''SETUPTIME'' from (select '+@columns+') as t" queryout   c:\Daily_Reports\daily_machinedescription_report_summary.csv  -c -t,  -T -S ' + @@servername                
        exec master..xp_cmdshell @sql               
        print @sql             



     --Generate data in the dummy file        

    set @sql='bcp "SELECT convert(varchar, ENTRY_DATE, 105) as DATE ,machinename as Machine,RunTime,ECTime,ReworkTime as RWTime,IdleTime,DownTime,SHIFT_TYPE as Shift,SetupTime  FROM VentureBI_Prod_Test..view_admin_report ORDER BY segment " queryout   c:\Daily_Reports\data_file.csv  -c -t,  -T -S' + @@servername                

     exec master..xp_cmdshell @sql          



      --Copy dummy file to passed EXCEL file              
     set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> "'+@file_name+'"'''              
     exec(@sql)               


         ----Delete dummy file               
       set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''              
       exec(@sql)    

enter image description here

С уважением,

Т.Навин

Ошибка при сохранении макроса:

enter image description here

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Я полагаю, вы передаете данные как CSV (из вашего кода).CSV-файлы не могут быть отформатированы.

Впоследствии вы можете преобразовать CSV-файл в xlsx или xls в выбранном вами языке программирования.

1 голос
/ 22 ноября 2011

Вы не можете вставить информацию о форматировании в файл CSV, который вам нужен.Файл CSV может содержать только данные.См.

http://office.microsoft.com/en-us/excel-help/excel-formatting-and-features-that-are-not-transferred-to-other-file-formats-HP010014105.aspx?CTT=5&origin=HP010099725#BM4

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

Я знаю, что вы только что сказали, что запускаете sp из планировщика, так что это может быть не вариант для вас, но вы можете подумать о создании файла Excel и последующем запускепроцесс из Excel и вставка результатов в предварительно отформатированную электронную таблицу.

0 голосов
/ 22 ноября 2011

Из того, что я знаю до сих пор (хотя и хочу узнать что-то новое по этому поводу), единственный способ добиться этого - предварительно отформатировать файл Excel и использовать шаблоны.

Однако вы также можете запустить это, если использование макроса не является проблемой:

Option Explicit 

Sub AutoFitAllColumns() 

    Application.ScreenUpdating = False 

    Dim strWorksheetName As String 
    Dim objWorkBook As Worksheet 

    strWorksheetName = ActiveSheet.Name 

    For Each objWorkBook In ActiveWorkbook.Worksheets 
        On Error Resume Next 
        objWorkBook.Activate 
        Cells.EntireColumn.AutoFit 
    Next objWorkBook

    Sheets(strWorksheetName).Select 
    Application.ScreenUpdating = True 

End Sub 

Private Sub Workbook_Open()
    AutoFitAllColumns
End Sub

Убедитесь, что код находится в файле Excel, который вы используете в качестве шаблона, а затем сначала сделайте его копию. Дело в том ... Я не уверен, что произойдет, если вы используете его для открытия .csv файлов с помощью Excel. Может быть, вы можете попробовать?

...