`

Silverlight使用Com组件操作Excel的封装类(1)

阅读更多

首先需要引用Microsoft.CSharp.dll  和 System.Core.dll。

然后需要脱离浏览器才能运行调试

   判断“是否脱离浏览器”和“提升信任”的方法

if (!Application.Current.IsRunningOutOfBrowser)
            {
                LSWindow.Alert("Excel导入功能必须在脱离浏览器环境下运行!");
                return;
            }

            if (!Application.Current.HasElevatedPermissions)
            {
                LSWindow.Alert("用户的应用信任权限不足,不可访问用户本地资源!");
                return;
            }
 

 

整个代码如下:

LSOOBXlsFactory.cs

namespace Longshine.SLLib.LSOOBExcel
{
    public class LSOOBXlsFactory
    {
        private static LSOOBXlsFactory instance = null;

        private LSOOBXlsFactory()
        {
            instance = new LSOOBXlsFactory();
        }

        public static LSOOBXlsApplication CreateExcelApplication()
        {
            return new LSOOBXlsApplication();
        }
    }
}
 

LSOOBXlsApplication.cs

using System.Runtime.InteropServices.Automation;
using System.Reflection;
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace Longshine.SLLib.LSOOBExcel
{
    public class LSOOBXlsApplication
    {
        dynamic excel = null;

        public LSOOBXlsApplication()
        {
            excel = AutomationFactory.CreateObject("Excel.Application");
        }

        /// <summary>
        /// 是否打开Excel程序
        /// </summary>
        public bool IsOpen
        {
            get
            {
                return excel.Visible;
            }
            set
            {
                excel.Visible = value;
            }
        }

        /// <summary>
        /// 打开Excel工作薄
        /// </summary>
        /// <param name="fileName">Excel文件全路径</param>
        /// <param name="isOpenApplication">是否要打开Excel程序</param>
        /// <returns></returns>
        public LSOOBXlsWorkbook OpenWorkbook(FileStream fs, string extension)
        {
            string tempPath = LSOOBXlsHelper.GetSpecialFolderPath(Environment.SpecialFolder.MyDocuments);
            string fileName = LSOOBXlsHelper.CopyFileToTemp(fs, tempPath, extension);

            LSOOBXlsWorkbook workBook = new LSOOBXlsWorkbook();
            workBook.WorkBook = excel.Workbooks.Open(fileName,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value
                );

            return workBook;
        }


        /// <summary>
        /// 关闭Excel
        /// </summary>
        public void Close()
        {
            if (excel != null)
            {
                excel.Workbooks.Close();
                excel.Quit();
                excel = null;
                GC.Collect();
            }
        }

        /// <summary>
        /// 设置是否Alert
        /// </summary>
        public bool DisplayAlerts
        {
            get
            {
                return excel.DisplayAlerts;
            }
            set
            {
                excel.DisplayAlerts = value;
            }
        }

    }
}
 

LSOOBXlsWorkbook.cs

using System;
using System.Collections.Generic;

namespace Longshine.SLLib.LSOOBExcel
{
    public class LSOOBXlsWorkbook
    {
        private dynamic workBook = null;
        private List<LSOOBXlsWorkSheet> workSheets = null;

        public LSOOBXlsWorkbook()
        {

        }

        public dynamic WorkBook
        {
            get
            {
                return workBook;
            }
            set
            {
                if (value != null)
                {
                    workBook = value;

                    workSheets = new List<LSOOBXlsWorkSheet>();
                    int sheetCount = WorkSheetsCount;
                    for (int i = 1; i <= sheetCount; i++)
                    {
                        LSOOBXlsWorkSheet sheet = new LSOOBXlsWorkSheet();
                        sheet.WorkSheet = workBook.Worksheets[i];
                        workSheets.Add(sheet);
                    }

                }
            }
        }

        /// <summary>
        /// 获得当前活动的工作页
        /// </summary>
        public LSOOBXlsWorkSheet ActiveSheet
        {
            get
            {
                LSOOBXlsWorkSheet currentSheet = new LSOOBXlsWorkSheet();
                currentSheet.WorkSheet = workBook.ActiveSheet;
                return currentSheet;
            }
        }

        /// <summary>
        /// 获得指定工作页
        /// </summary>
        /// <param name="?"></param>
        /// <returns></returns>
        public LSOOBXlsWorkSheet GetSheet(string sheetName)
        {
            LSOOBXlsWorkSheet currentSheet = null;
            foreach (var s in workSheets)
            {
                if (sheetName == s.Name)
                    currentSheet = s;
            }

            return currentSheet;
        }

        public LSOOBXlsWorkSheet GetSheet(int sheetIndex)
        {
            LSOOBXlsWorkSheet currentSheet = new LSOOBXlsWorkSheet();
            currentSheet.WorkSheet = workBook.Worksheets(sheetIndex);
            return currentSheet;
        }

        /// <summary>
        /// 获得工作页列表
        /// </summary>
        public List<LSOOBXlsWorkSheet> WorkSheets
        {
            get
            {
                return workSheets;
            }
        }

        /// <summary>
        /// 获得工作页的个数
        /// </summary>
        public int WorkSheetsCount
        {
            get
            {
                return workBook.Worksheets.Count;
            }
        }

        /// <summary>
        /// 增加工作页
        /// </summary>
        /// <param name="sheetName"></param>
        /// <returns></returns>
        public LSOOBXlsWorkSheet AddSheet(string sheetName)
        {
            dynamic newSheet = workBook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            newSheet.Name = sheetName;
            LSOOBXlsWorkSheet sheet = new LSOOBXlsWorkSheet();
            sheet.WorkSheet = newSheet;
            workSheets.Add(sheet);

            return sheet;
        }

        /// <summary>
        /// 删除工作页
        /// </summary>
        /// <param name="sheetName"></param>
        public void RemoveSheet(string sheetName)
        {
            // GetSheet(sheetName).Delete();
        }

        /// <summary>
        /// 保存Excel
        /// </summary>
        public void Save()
        {
            workBook.Save();
        }

        /// <summary>
        /// 关闭Excel
        /// </summary>
        public void Close()
        {
            workBook.Close(Type.Missing, Type.Missing, Type.Missing);
        }
    }
}

 

LSOOBXlsWorkSheet.cs

namespace Longshine.SLLib.LSOOBExcel
{
    public class LSOOBXlsWorkSheet
    {
        dynamic workSheet = null;

        public LSOOBXlsWorkSheet()
        {
        }

        public dynamic WorkSheet
        {
            get
            {
                return workSheet;
            }
            set
            {
                if (value != null)
                    workSheet = value;
            }
        }

        /// <summary>
        /// 设置或获取工作页的名称
        /// </summary>
        public string Name
        {
            get
            {
                return workSheet.Name;
            }
            set
            {
                if (!string.IsNullOrEmpty(value))
                    workSheet.Name = value;
            }
        }

        public void Delete()
        {
            workSheet.Delete();
        }

        /// <summary>
        /// 激活该工作页
        /// </summary>
        public void Activate()
        {
            workSheet.Activate();
        }

        /// <summary>
        /// 获取指定的单元格
        /// </summary>
        /// <param name="row"></param>
        /// <param name="column"></param>
        /// <returns></returns>
        public LSOOBXlsCell GetCell(int row, int column)
        {
            LSOOBXlsCell cell = new LSOOBXlsCell();
            dynamic c = workSheet.Cells(row, column);
            cell.Cell = c;

            return cell;
        }

        /// <summary>
        /// 获取指定的区域
        /// </summary>
        /// <param name="range"></param>
        /// <returns></returns>
        public LSOOBXlsRange GetRange(string range)
        {
            LSOOBXlsRange rang = new LSOOBXlsRange();
            dynamic r = workSheet.Range(range);
            rang.Range = r;

            return rang;
        }

        /// <summary>
        /// 获取指定的区域
        /// </summary>
        /// <param name="fromCell">开始指定的单元格</param>
        /// <param name="toCell">结束指定的单元格</param>
        /// <returns></returns>
        public LSOOBXlsRange GetRange(string fromCell, string toCell)
        {
            return GetRange(fromCell + ":" + toCell);
        }

        /// <summary>
        /// 获取使用中的区域
        /// </summary>
        /// <returns></returns>
        public LSOOBXlsRange GetUsedRange()
        {
            LSOOBXlsRange rang = new LSOOBXlsRange();
            dynamic r = workSheet.UsedRange;
            rang.Range = r;

            return rang;
        }

        /// <summary>
        /// 获取指定的列
        /// </summary>
        /// <param name="columnName"></param>
        /// <returns></returns>
        public LSOOBXlsColumn GetColumn(string columnName)
        {
            LSOOBXlsColumn column = new LSOOBXlsColumn();
            dynamic c = workSheet.Columns(columnName);
            column.Column = c;

            return column;
        }

        /// <summary>
        /// 插入一行
        /// </summary>
        /// <param name="rowIndex"></param>
        public void InsertRow(int rowIndex)
        {
            workSheet.Rows[rowIndex].Insert();
        }
        /// <summary>
        /// 插入一列
        /// </summary>
        /// <param name="columnIndex"></param>
        public void InsertColumn(int columnIndex)
        {
            workSheet.Columns[columnIndex].Insert();
        }
        /// <summary>
        /// 删除一行
        /// </summary>
        /// <param name="rowIndex"></param>
        public void DeleteRow(int rowIndex)
        {
            workSheet.Rows[rowIndex].Delete();
        }
        /// <summary>
        /// 删除一列
        /// </summary>
        /// <param name="columnIndex"></param>
        public void DeleteColumn(int columnIndex)
        {
            workSheet.Columns[columnIndex].Delete();
        }
    }
}
 

LSOOBXlsCell.cs

namespace Longshine.SLLib.LSOOBExcel
{
    public class LSOOBXlsCell
    {
        dynamic cell = null;

        public LSOOBXlsCell()
        {
        }

        public dynamic Cell
        {
            get
            {
                return cell;
            }
            set
            {
                if (value != null)
                    cell = value;
            }
        }
        /// <summary>
        /// 值
        /// </summary>
        public object Value
        {
            get
            {
                return cell.Value;
            }
            set
            {
                if (value != null)
                    cell.Value = value;
            }
        }
        /// <summary>
        /// 列宽
        /// </summary>
        public int ColumnWidth
        {
            get
            {
                return cell.ColumnWidth;
            }
            set
            {
                cell.ColumnWidth = value;
            }
        }

        /// <summary>
        /// 是否加粗
        /// </summary>
        public bool FontBold
        {
            get
            {
                return cell.Font.Bold;
            }
            set
            {
                cell.Font.Bold = value;
            }
        }

        public int FontSize
        {
            get
            {
                return cell.Font.Size;
            }
            set
            {
                cell.Font.Size = value;
            }
        }

    }
}
 

 

 

 

 

 

分享到:
评论

相关推荐

    silverlight4 打开excel 浏览excel

    在本例中,可能用到了名为“XLSXparsingLib”的库,这个库可能是专门用于解析XLSX格式(Excel 2007及以上版本使用的Open XML格式)的组件。XLSXparsingLib可能提供了API,使得开发者可以读取工作表、单元格数据、...

    SilverLight使用COM组件ADO方式访问access数据库

    然而,通过使用COM组件(Component Object Model),SilverLight可以与非托管代码交互,从而实现对Access数据库的访问。本篇文章将详细讲解如何使用COM组件以及ADO(ActiveX Data Objects)方式在SilverLight中实现...

    silverlight中导入和导出Excel

    2. **文件上传**:在Silverlight客户端,使用`System.Windows.Browser`命名空间的`HtmlPage`类来实现文件选择对话框,让用户选择要导入的Excel文件。然后,通过HTTP POST请求将文件发送到WCF服务。 3. **数据处理**...

    Silverlight导入导出到Excel.rar

    1. **Silverlight中的数据操作**: Silverlight提供了一套丰富的数据绑定和数据操作功能,允许开发者将UI元素与后台数据模型进行绑定,使得用户界面能够动态反映数据的变化。在导入导出Excel的场景下,开发者首先...

    Silverlight4 使用Excel文件函数库

    这些组件封装了对Excel文件的操作,使得开发者可以通过API调用来读取、写入或者修改Excel数据,而无需依赖完整的Office安装。这些DLL文件包含了对Excel文件格式的理解和处理逻辑,可以在受限的Silverlight环境中运行...

    silverlight 将DataGrid数据导出EXCEL

    DataGrid是Silverlight提供的一种控件,用于显示和操作表格数据。而Excel则是Microsoft Office套件中的电子表格应用,广泛用于数据管理和分析。 导出DataGrid数据到Excel主要涉及以下几个关键知识点: 1. **...

    Silverlight4中上传EXCEL并将EXCEL文件数据插入到SQL数据库中

    可以使用 `WebClient` 或 `HttpWebRequest` 类进行异步文件上传和数据库操作,避免阻塞 UI。 8. **错误处理**: 在整个过程中,确保捕获并处理可能的异常,如文件读取错误、网络问题、数据库连接失败等。使用 `try...

    Silverlight 导出excel

    4. 使用Open XML SDK:在服务器端,可以使用Microsoft的Open XML SDK来创建和操作Excel文档。这个SDK允许程序直接操作XML结构,构建和填充Excel表格。 5. 示例步骤: - 客户端:在Silverlight应用中,用户触发导出...

    silverlight 仪表盘组件

    该组件基于VS2008(Visual Studio 2008)开发,是Silverlight技术的一个实例应用,展示了如何在Web应用中构建和使用仪表盘控件。仪表盘组件在商业智能、数据分析和监控系统中十分常见,能够以图形化的方式展示关键...

    silverlight ListBox 导出至EXCEL

    在Silverlight应用中,如果有一个名为SL-UpDownFile的组件,它可能封装了文件操作的复杂逻辑,使得开发人员可以更容易地处理文件上传和下载。 总的来说,实现Silverlight中的ListBox文件列表管理和导出到Excel,...

    silverlight导出数据到EXCEL

    在Silverlight中,可以使用StreamWriter类,并指定Encoding.UTF8参数来创建文件。 5. **处理科学计数法**:在数值较大或较小时,Excel可能会自动将其转换为科学计数法。为了避免这种情况,我们可以设置单元格的数字...

    开源Silverlight数据访问组件System.Data.Silverlight

    可以实现在Web端无需事先手工编写或自动创建任何程序代码和数据实体类的情况下, 便可在Silverlight端对Web端数据库进行增加、删除、修改、查询等数据操作。此外, 还支持访问数据库的存储过程(StoredProcdures)、视图...

    Silverlight中Accordion组件动态生成示例

    以下是一些关于如何在Silverlight 4中使用Accordion组件动态生成内容的关键知识点: 1. **组件引入**:首先,你需要在项目中引用System.Windows.Controls.Toolkit库,这个库包含了Accordion组件。通过添加引用,你...

    silverlight 读取Excel

    - `ChartZoom.Web` 和 `ChartZoom`:可能与图表缩放功能有关,可能是Web服务端和Silverlight客户端的组件。 - `xlsx_samples`:可能包含Excel样例文件。 - `InteractChartLib` 和 `InteractChartCommonLib`:可能...

    将Excel2007导入到silverlight的datagrid中

    1. **读取Excel文件**:使用C#或VB.NET的第三方库,如EPPlus,它可以解析Office Open XML格式的Excel文件。首先,需要安装EPPlus库,然后在代码中创建一个`FileInfo`对象,指定Excel文件路径,并用它来创建`Excel...

    SilverLight 文件上传组件源码及DEMO

    标题中的“SilverLight 文件上传组件源码及DEMO”指的是一个使用Silverlight技术开发的文件上传功能的组件,包括源代码和演示实例。Silverlight是微软推出的一种浏览器插件,用于增强网页的交互性和多媒体体验,它...

    Silverlight安装问题解决安装组件和安装软件(针对于VS简体中文版英文版的不适用)

    1. **系统兼容性**:确保你的操作系统版本与Silverlight 5兼容,例如Windows 7或更高版本。同时,检查是否已经安装了最新版本的.NET Framework,因为Silverlight需要它作为运行时环境。 2. **权限问题**:确保你以...

    Silverlight和Excel的互操作源代码

    Silverlight 4提供了访问COM对象的API,允许开发人员通过Silverlight应用访问Notepad,Word,Excel 或者 Outlook。 本例将演示Silverlight 4打开Excel。

    Synchronous_Silverlight与WCF同步操作

    3. **生成服务代理**:在Silverlight项目中,使用“添加服务引用”功能,输入WCF服务的地址,Visual Studio会自动生成服务代理类,这个类包含了客户端调用服务的方法。 4. **调用服务**:在Silverlight客户端代码中...

    SilverLight图表组件

    - **Silverlight Binaries**:包含了专为SilverLight应用程序编译的库文件,是使用此组件的基础。 综上所述,SilverLight图表组件是开发高质量、交互性强的数据可视化应用的理想选择。无论是桌面应用还是Web应用,...

Global site tag (gtag.js) - Google Analytics