Excel.Application 导出Excel

本文介绍了两种将网页上的表格数据导出至Excel的方法:逐个单元格导出法和整体拷贝法。逐个单元格导出法适用于对导出表格式有较高要求的情况,而整体拷贝法则以较少的代码实现快速导出,但可能会出现样式错位等问题。

第一种:逐个单元格导出法(此方法操作相对复杂,但是比较灵和,适合对导出表有要求的情况)

javascript代码如下  
<SCRIPT LANGUAGE="javascript">   
function ExcelExport(tableid)   
{   
    var table = document.getElementById(tableid); //获取页面的table  
    var excel = new ActiveXObject("Excel.Application"); //实例化Excel.Application对象  
    var workB = excel.Workbooks.Add(); ////添加新的工作簿  
    var sheet = workB.ActiveSheet;   
//var sheet= workB.Worksheets(1);//该句代码和上句代码同意,都是激活一个sheet  
/***************常用样式设置语句***************************************/
    //sheet.Rows(1).WrapText = false; //自动换行设置  
    //sheet.Rows(1).Font.Size=18;//设置第一行的字体大小  
    //sheet.Rows(1).Interior.ColorIndex=2;//设置第一行背景色   
    //sheet.Rows(1).Font.ColorIndex=1;//设置第一行字体色     
    //sheet.Range(sheet.Cells(1,1),sheet.Cells(1,7)).mergecells=true;//第一行1到7单元格合并  
    sheet.Columns("A").ColumnWidth =35;//设置列宽  
    sheet.Columns("B").ColumnWidth =35;  
    //sheet.Columns("A:B").ColumnWidth =35;//另一种设置列宽的方式  
    sheet.Rows(1).RowHeight = 35;//设置行高  
    //sheet.Rows(1).Font.Name="黑体";//设置字体  
     //sheet.Columns.AutoFit;//所有列自适应宽度  
     //水平对齐方式(貌似-4108为水平居中)  
    //sheet.Range( sheet.Cells(1,1),sheet.Cells(1,5)).HorizontalAlignment =-4108;  
    //垂直对齐方式  
    //sheet.Range( sheet.Cells(1,1),sheet.Cells(1,5)).VerticalAlignment =-4108;  
    //根据Borders()中参数值设置各个方向边距,1,2,3,4--->top,buttom,left,right  
    //sheet.Range( sheet.Cells(2,1),sheet.Cells(1,5)).Borders(1).Weight = 2;  
/**将页面table写入到Excel中,具体复杂情况(合并单元格等)可在这里面具体操作**********/
    var LenRow = table .rows.length; //以下为循环遍历获取页面table的cell元素  
    for (i = 0; i < LenRow ; i++)   
    {   
        var lenCol = table.rows(i).cells.length;   
        for (j = 0; j < lenCol ; j++)   
        {   
            sheet.Cells(i + 1, j + 1).value = table.rows(i).cells(j).innerText; //通过该语句将table的每个  
                                        //cell赋予Excel 当前Active的sheet下的相应的cell下  
        }   
    }   
    excel.Visible = true;//设置excel为可见  
excel.UserControl = true; //将Excel交由用户控制  
}   
</SCRIPT>
javascript代码如下
<SCRIPT LANGUAGE="javascript">
function ExcelExport(tableid)
{
    var table = document.getElementById(tableid); //获取页面的table
    var excel = new ActiveXObject("Excel.Application"); //实例化Excel.Application对象
    var workB = excel.Workbooks.Add(); ////添加新的工作簿
    var sheet = workB.ActiveSheet;
//var sheet= workB.Worksheets(1);//该句代码和上句代码同意,都是激活一个sheet
/***************常用样式设置语句***************************************/
    //sheet.Rows(1).WrapText = false; //自动换行设置
    //sheet.Rows(1).Font.Size=18;//设置第一行的字体大小
    //sheet.Rows(1).Interior.ColorIndex=2;//设置第一行背景色
    //sheet.Rows(1).Font.ColorIndex=1;//设置第一行字体色  
    //sheet.Range(sheet.Cells(1,1),sheet.Cells(1,7)).mergecells=true;//第一行1到7单元格合并
    sheet.Columns("A").ColumnWidth =35;//设置列宽
    sheet.Columns("B").ColumnWidth =35;
    //sheet.Columns("A:B").ColumnWidth =35;//另一种设置列宽的方式
    sheet.Rows(1).RowHeight = 35;//设置行高
    //sheet.Rows(1).Font.Name="黑体";//设置字体
     //sheet.Columns.AutoFit;//所有列自适应宽度
     //水平对齐方式(貌似-4108为水平居中)
    //sheet.Range( sheet.Cells(1,1),sheet.Cells(1,5)).HorizontalAlignment =-4108;
    //垂直对齐方式
    //sheet.Range( sheet.Cells(1,1),sheet.Cells(1,5)).VerticalAlignment =-4108;
    //根据Borders()中参数值设置各个方向边距,1,2,3,4--->top,buttom,left,right
    //sheet.Range( sheet.Cells(2,1),sheet.Cells(1,5)).Borders(1).Weight = 2;
/**将页面table写入到Excel中,具体复杂情况(合并单元格等)可在这里面具体操作**********/
    var LenRow = table .rows.length; //以下为循环遍历获取页面table的cell元素
    for (i = 0; i < LenRow ; i++)
    {
        var lenCol = table.rows(i).cells.length;
        for (j = 0; j < lenCol ; j++)
        {
            sheet.Cells(i + 1, j + 1).value = table.rows(i).cells(j).innerText; //通过该语句将table的每个
                                        //cell赋予Excel 当前Active的sheet下的相应的cell下
        }
    }
    excel.Visible = true;//设置excel为可见
excel.UserControl = true; //将Excel交由用户控制
}
</SCRIPT>

       第二种方法:整体拷贝法(该方法以较少代码实现Excel数据的导出,但是导出数据格式可能存在样式和页面不一致情况,甚至像背景色等会出现错位,而且如果在html页面中对需要导出的table样式做过设置的话,此处部分样式设置可能不会起作用)

<SCRIPT LANGUAGE="javascript">   
function ExcelExport(tableid)   
{   
    var table = document.getElementById(tableid);   
    var ax =new ActiveXObject("Excel.Application");    
    var workbook = oXL.Workbooks.Add();   
     var sheet = workbook.ActiveSheet;   
     var sel = document.body.createTextRange();   
       
     //把table中的数据移到sel中   
     sel.moveToElementText(table);   
       
     sel.select(); //选中sel中所有数据   
     sel.execCommand("Copy");//复制sel中的数据    
           
      sheet.Columns("A").ColumnWidth =35;//设置列宽  
      sheet.Columns("B").ColumnWidth =35;  
      sheet.Rows(1).RowHeight = 35;//设置表头高  
          
     //将sel中数据拷贝到sheet工作薄中  
     sheet.Paste();           
     ax.Visible = true;   
     //通过打印机直接将Excel数据打印出来  
     sheet.Printout;  
     ax.UserControl = true;   
}   
</SCRIPT>

 

转自: http://blog.youkuaiyun.com/lxw503606554/archive/2010/01/14/5189782.aspx

你遇到的错误是: ``` ❌ 出现错误: Excel.Application.xlCenter ``` 这个错误说明你试图通过 `excel.xlCenter` 获取 Excel 的常量,但该属性在当前上下文中并**不存在**,也就是说 `win32com.client.Dispatch("Excel.Application")` 返回的对象并不直接支持 `.xlCenter` 这样的属性。 --- ## ✅ 错误原因分析 在 `win32com.client` 中,Excel 的常量(如 `xlCenter`、`xlContinuous`)**并不是直接暴露在 Excel.Application 对象上的属性**。你需要通过 `win32.constants` 或者使用 `excel` 对象的 `Application` 属性来获取这些常量。 --- ## ✅ 正确解决方法 ### ✅ 方法一:使用 `win32.constants`(推荐) ```python from win32com.client import constants ``` 然后使用: ```python header.HorizontalAlignment = constants.xlCenter ``` ### ✅ 方法二:使用 `excel.Application` 获取常量 ```python xlCenter = excel.Application.NamedOption("xlCenter") ``` 但这种方法不太稳定,推荐使用第一种。 --- ## ✅ 修复后的完整代码(使用 `constants`) ```python import win32com.client as win32 from win32com.client import constants # 重要:导入 constants import os try: # 启动 Excel 应用 excel = win32.Dispatch("Excel.Application") excel.Visible = False excel.DisplayAlerts = False excel.ScreenUpdating = False # 打开工作簿 file_path = r'C:\Users\Lt\Desktop\test\merged_header_file.xlsx' workbook = excel.Workbooks.Open(file_path) # 激活 "通报" 子表 sheet = workbook.Sheets("通报") # 获取数据区域 used_range = sheet.UsedRange # 1. 设置字体、字号、加粗 used_range.Font.Name = "微软雅黑" used_range.Font.Size = 11 # 2. 标题行加粗 + 居中(使用 constants.xlCenter) header = used_range.Rows(1) header.Font.Bold = True header.HorizontalAlignment = constants.xlCenter # <<< 使用 constants 模块 header.Interior.Color = 0x9BCD9B # 浅绿色背景 # 3. 设置自动筛选 used_range.AutoFilter() # 4. 设置列宽自适应 used_range.Columns.AutoFit() # 5. 设置行高 for row in used_range.Rows: row.RowHeight = 18 # 6. 添加边框(使用 constants) borders = used_range.Borders borders.LineStyle = constants.xlContinuous borders.Weight = constants.xlThin # 7. 截图区域 used_range.CopyPicture(Appearance=1, Format=2) # xlScreen, xlPicture # 创建临时图表用于粘贴图片 chart_obj = sheet.ChartObjects().Add(0, 0, used_range.Width, used_range.Height) chart = chart_obj.Chart chart.Paste() # 图片保存路径 output_path = r'C:\Users\Lt\Desktop\test\通报_美化截图.png' # 导出图表为图片 chart.Export(output_path, "PNG") # 清理 chart_obj.Delete() workbook.Close(SaveChanges=False) excel.Quit() print(f"✅ 美化后的截图已保存为:{output_path}") except Exception as e: print("❌ 出现错误:", str(e)) ``` --- ## ✅ 常量使用说明(推荐从 `constants` 获取) | 常量名 | 用法 | |--------|------| | `constants.xlCenter` | 居中对齐 | | `constants.xlLeft` | 左对齐 | | `constants.xlRight` | 右对齐 | | `constants.xlContinuous` | 实线边框 | | `constants.xlThin` | 细线边框 | | `constants.xlAutomatic` | 自动颜色 | --- ## ✅ 注意事项 - ✅ `constants` 模块是 `win32com.client` 提供的,用于访问 COM 对象的常量; - ✅ 使用 `constants.xlCenter` 是最安全、最标准的做法; - ✅ 如果你不确定某个常量是否存在,可以使用 `dir(constants)` 查看所有可用常量。 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值