Excel操控方法之Com组件


using Microsoft.Office.Interop.Excel;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace ComTest
{
    public class MSExcel
    {
        //Excel重要元素节点
        private Microsoft.Office.Interop.Excel.Application app;
        private Workbooks workbooks;
        private Workbook workbook;
        private string excelPath;
        public MSExcel(string excelPath)
        {
            init();
            this.excelPath = excelPath;
        }
        //Excel
        private void init()
        {
            app = new Microsoft.Office.Interop.Excel.Application();
            app.Visible = false;
            workbooks = app.Workbooks;
        }
        //载入Excel
        public bool LoadExcel()
        {
            workbook = workbooks.Open(excelPath);
            return !workbook.ReadOnly;
        }
        //创建Excel
        public void CreateExcel(string worksheetName)
        {
            workbook = workbooks.Add(true);
            ((Worksheet)workbook.Worksheets[1]).Name = worksheetName;
            workbook.SaveAs(excelPath);
        }
        //强制杀掉Excel的所有进程
        public void KillExcel()
        {
            Close();
            Dispose();
            Process[] procs = Process.GetProcessesByName("excel");
            foreach (Process pro in procs)
            {
                pro.Kill();
            }
            init();
            LoadExcel();
            Save();
            Clo
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Win32 COM组件中封装Excel表格,需要使用Microsoft Office ExcelCOM对象模型。以下是一个简单的例子,演示如何打开一个Excel文件,读取并修改其中的数据,然后保存并关闭该文件: ```cpp #include <windows.h> #include <ole2.h> #include <oleauto.h> #include <stdio.h> int main() { // 初始化COM库 CoInitialize(NULL); // 创建Excel对象 IDispatch* pExcel = NULL; CLSID clsid; CLSIDFromProgID(L"Excel.Application", &clsid); CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pExcel); // 打开Excel文件 VARIANT vFileName; VariantInit(&vFileName); vFileName.vt = VT_BSTR; vFileName.bstrVal = SysAllocString(L"C:\\Test.xlsx"); VARIANT vReadOnly; VariantInit(&vReadOnly); vReadOnly.vt = VT_BOOL; vReadOnly.boolVal = VARIANT_FALSE; IDispatch* pWorkbooks = NULL; pExcel->Invoke(0x223, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &pWorkbooks, NULL, NULL); IDispatch* pWorkbook = NULL; pWorkbooks->Invoke(0x3ec, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, NULL, &vFileName, &vReadOnly, &pWorkbook, NULL); pWorkbooks->Release(); VariantClear(&vFileName); VariantClear(&vReadOnly); // 获取第一个工作表 IDispatch* pWorksheets = NULL; pWorkbook->Invoke(0x22e, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &pWorksheets, NULL, NULL); IDispatch* pWorksheet = NULL; VARIANT vIndex; VariantInit(&vIndex); vIndex.vt = VT_I4; vIndex.lVal = 1; pWorksheets->Invoke(0x0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &vIndex, &pWorksheet, NULL); pWorksheets->Release(); VariantClear(&vIndex); // 读取和修改单元格的值 VARIANT vCell; VariantInit(&vCell); vCell.vt = VT_BSTR; vCell.bstrVal = SysAllocString(L"A1"); IDispatch* pRange = NULL; pWorksheet->Invoke(0x4c, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &vCell, &pRange, NULL); IDispatch* pValue = NULL; pRange->Invoke(0x0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, NULL, &pValue, NULL); VARIANT vNewValue; VariantInit(&vNewValue); vNewValue.vt = VT_BSTR; vNewValue.bstrVal = SysAllocString(L"New Value"); pValue->Invoke(0x3c, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, NULL, &vNewValue, NULL, NULL); pValue->Release(); pRange->Release(); VariantClear(&vCell); VariantClear(&vNewValue); // 保存并关闭Excel文件 VARIANT vSaveChanges; VariantInit(&vSaveChanges); vSaveChanges.vt = VT_BOOL; vSaveChanges.boolVal = VARIANT_TRUE; pWorkbook->Invoke(0x1f4, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, NULL, &vSaveChanges, NULL, NULL); pWorkbook->Release(); VariantClear(&vSaveChanges); pExcel->Invoke(0x12d, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, NULL, NULL, NULL, NULL); // 释放COM对象并清除COM库 pWorksheet->Release(); pExcel->Release(); CoUninitialize(); return 0; } ``` 这个例子使用了ExcelCOM对象模型中的一些常用方法和属性。你可以根据需要进行调整和扩展。注意在使用COM对象时要仔细处理对象的引用计数和内存释放,以避免内存泄漏和程序崩溃等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值