如何从sql server复制数据时自动调整excel单元格

时间:2011-11-22 11:16:02

标签: sql sql-server sql-server-2008 stored-procedures

我正在使用存储过程将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

此致

T.Navin

保存宏代码时出错:

enter image description here

3 个答案:

答案 0 :(得分:1)

我猜您将数据作为csv(来自您的代码)传输。 csv文件无法格式化。

您可以在之后的编程语言中将csv文件转换为xlsx或xls。

答案 1 :(得分:1)

您无法将格式信息插入到您需要的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,但这并不容易,并且需要在proc中生成并不容易的页眉和页脚。

我知道您刚刚说过您正在从调度程序运行sp,所以这可能不是您的选择,但您可以考虑创建一个Excel文件,然后从Excel运行proc并将结果插入到预先格式化的电子表格。

答案 2 :(得分:0)

据我所知到目前为止(虽然愿意学习新的东西)但我完成这项工作的唯一方法是预先格式化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文件中,然后首先复制它。事情是..我不确定如果你使用excel打开.csv文件将会发生什么。也许你可以试试?