快速写excel的方法
对于用com组件写excel,笔者表示那个太慢了。而且很耗资源,还要装excel。
今天我们就用写文本文件的方式来写excel。
步骤1,用excel写好一个设计一个我们想要的模板。
步骤2,我们把做好的excel模板,另存为。 这时会出现另存为的对话框。在保存类型中选择“XML 电子表格 2003 (*.xml)”。然后名字随便写。
步骤3,把我们刚保存的xml文件用文本打开。我们就会看到,其实excel是以xml方式存放的数据。如果这时你用excel打开那个xml文件,会发现excel出现的就是我们刚才的设计的模板。而且格式和我们设计的一样。
步骤4,所以我们可以用写xml,或者文本的方式写excel,只要符合我们刚才保存的那个xml格式。然后文件的后缀名改成xls就OK了。 而这个写的速度超快。
说完了上面的方法我们用代码把它实现吧。笔者主要编程语言为c#。所以就用c#封装了个写excel的类。代码如下
- public class ExcelHelper
- {
- private Excel.Application oExcel = null;
- private Excel.Workbook oBook = null;
- private Excel.Worksheet oSheet = null;
- private Excel.Range oRange = null;
- public ExcelHelper()
- {
- oExcel = new Excel.Application();
- oBook = oExcel.Application.Workbooks.Add(true);
- oSheet = (Excel.Worksheet)oBook.ActiveSheet;
- }
- /// <summary>
- /// 向excel写入文本(如向“A1”写入文字:InsertText("A1",要填入的文字))
- /// </summary>
- /// <param name="val_range">单元格</param>
- /// <param name="val_text">文本</param>
- public void InsertText(string val_range, string val_text)
- {
- oRange = oSheet.Range[val_range];
- oRange.Value = val_text;
- }
- /// <summary>
- /// 向excel写入文本
- /// </summary>
- /// <param name="val_range">单元格</param>
- /// <param name="val_text">文本</param>
- /// <param name="val_fontSize">字体大小</param>
- public void InsertText(string val_range, string val_text, float val_fontSize)
- {
- oRange = oSheet.Range[val_range];
- oRange.Value = val_text;
- oRange.Font.Size = val_fontSize;
- }
- /// <summary>
- /// 向excel写入文本(如向“B1”写入文字:InsertText(1,2,要填入的文字))
- /// </summary>
- /// <param name="val_i">行号</param>
- /// <param name="val_j">列号</param>
- /// <param name="val_text">文本</param>
- public void InsertText(int val_i, int val_j, string val_text)
- {
- oRange = (Excel.Range)oSheet.Cells[val_i, val_j];
- oRange.Value = val_text;
- }
- /// <summary>
- /// 向excel写入文本(如向“B1”写入文字:InsertText(1,2,要填入的文字,字体大小))
- /// </summary>
- /// <param name="val_i">行号</param>
- /// <param name="val_j">列号</param>
- /// <param name="val_text">文本</param>
- /// <param name="val_fontSize">字体大小</param>
- public void InsertText(int val_i, int val_j, string val_text, float val_fontSize)
- {
- oRange = oSheet.Cells[val_i, val_j];
- oRange.Value = val_text;
- oRange.Font.Size = val_fontSize;
- }
- /// <summary>
- /// 读取excel文本项(如读取“B1”的文字:ReadText("B1"))
- /// </summary>
- /// <param name="val_range">单元格</param>
- /// <returns></returns>
- public string ReadText(string val_range)
- {
- oRange = oSheet.Range[val_range];
- return oRange.Text.ToString();
- }
- /// <summary>
- /// 读取excel文本项(如读取“A1”的文字:ReadText(1,1))
- /// </summary>
- /// <param name="val_i">行号</param>
- /// <param name="val_j">列号</param>
- /// <returns></returns>
- public string ReadText(int val_i, int val_j)
- {
- oRange = oSheet.Cells[val_i, val_j];
- return oRange.Text.ToString();
- }
- /// <summary>
- /// 合并单元格
- /// </summary>
- /// <param name="x1">行号</param>
- /// <param name="y1">列号</param>
- /// <param name="x2">行号</param>
- /// <param name="y2">列号</param>
- public void MerMergeCells(int x1, int y1, int x2, int y2)
- {
- oSheet.Range[oSheet.Cells[x1, y1], oSheet.Cells[x2, y2]].Merge();
- }
- /// <summary>
- /// 设置excel列的默认样式
- /// </summary>
- public void SetColumnDefaultStyle()
- {
- oSheet.Columns.EntireColumn.AutoFit();
- oSheet.Columns.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
- }
- /// <summary>
- /// 保存excel文件(如要将excel保存到D:\test.xls:SaveAs)
- /// </summary>
- /// <param name="val_saveAsFilePath">文件路径</param>
- /// <returns></returns>
- public bool SaveAs(string val_saveAsFilePath)
- {
- try
- {
- oSheet.SaveAs(val_saveAsFilePath);
- return true;
- }
- catch
- {
- return false;
- }
- }
- public bool Print()
- {
- try
- {
- oSheet.PrintOut();
- return true;
- }
- catch
- {
- return false;
- }
- }
- /// <summary>
- /// 自动释放excel资源
- /// </summary>
- public void Dispose()
- {
- if (oExcel != null)
- {
- oExcel.Workbooks.Close();
- oExcel.Quit();
- KillAllExcel();
- oExcel = null;
- }
- if (oBook != null)
- {
- oBook = null;
- }
- if (oSheet != null)
- {
- oSheet = null;
- }
- if (oRange != null)
- {
- oRange = null;
- }
- GC.Collect();
- }
- /// <summary>
- /// 获取所有excel进程
- /// </summary>
- /// <returns></returns>
- private static List<Process> GetExcelProcesses()
- {
- Process[] processes = Process.GetProcesses();
- List<Process> excelProcesses = new List<Process>();
- for (int i = ; i < processes.Length; i++)
- {
- if (processes[i].ProcessName.ToUpper() == "EXCEL")
- excelProcesses.Add(processes[i]);
- }
- return excelProcesses;
- }
- /// <summary>
- /// 杀死所有Excel进程
- /// </summary>
- private static void KillAllExcel()
- {
- List<Process> excelProcesses = GetExcelProcesses();
- for (int i = ; i < excelProcesses.Count; i++)
- {
- excelProcesses[i].Kill();
- }
- }
- /// <summary>
- /// DataTable导出Excel
- /// </summary>
- /// <param name="sFileName"></param>
- /// <param name="dt"></param>
- public void DataTableToExcel(string fileName, DataTable dt)
- {
- int CurrentCol = ;//当前列
- int RowCount = dt.Rows.Count + ;//总行数
- int ColCount = dt.Columns.Count;//总列数
- StreamWriter sw = new StreamWriter(fileName, false);//文件如果存在,则自动覆盖
- try
- {
- #region XML头部
- sw.WriteLine("<?xml version=\"1.0\"?>");
- sw.WriteLine("<?mso-application progid=\"Excel.Sheet\"?>");
- sw.WriteLine("<Workbook");
- sw.WriteLine("xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"");
- sw.WriteLine("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">");
- sw.WriteLine("\t<Styles>");
- sw.WriteLine("\t\t<Style ss:ID=\"Default\" ss:Name=\"Normal\"><Alignment ss:Vertical=\"Center\"/><Font ss:FontName=\"宋体\" ss:Size=\"12\"/></Style>");
- sw.WriteLine("\t\t<Style ss:ID=\"s47\"><Font ss:FontName=\"宋体\" ss:Size=\"11\" ss:Color=\"#000000\"/><Interior ss:Color=\"#EBF1DE\" ss:Pattern=\"Solid\"/></Style>");
- sw.WriteLine("\t\t<Style ss:ID=\"s33\"><Borders><Border ss:Position=\"Bottom\" ss:LineStyle=\"Double\" ss:Weight=\"3\" ss:Color=\"#3F3F3F\"/><Border ss:Position=\"Left\" ss:LineStyle=\"Double\" ss:Weight=\"3\" ss:Color=\"#3F3F3F\"/><Border ss:Position=\"Right\" ss:LineStyle=\"Double\" ss:Weight=\"3\" ss:Color=\"#3F3F3F\"/><Border ss:Position=\"Top\" ss:LineStyle=\"Double\" ss:Weight=\"3\" ss:Color=\"#3F3F3F\"/></Borders><Font ss:FontName=\"宋体\" ss:Size=\"11\" ss:Color=\"#FFFFFF\" ss:Bold=\"1\"/><Interior ss:Color=\"#A5A5A5\" ss:Pattern=\"Solid\"/></Style>");
- sw.WriteLine("\t\t<Style ss:ID=\"s68\" ss:Parent=\"s33\"><Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Center\"/></Style>");
- sw.WriteLine("\t\t<Style ss:ID=\"s93\" ss:Parent=\"s47\"><Borders><Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#3F3F3F\"/><Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#3F3F3F\"/><Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#3F3F3F\"/><Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#3F3F3F\"/></Borders></Style>");
- sw.WriteLine("\t</Styles>");
- sw.WriteLine("\t<Worksheet ss:Name=\"Sheet1\">");
- sw.WriteLine("\t\t<Table ss:DefaultColumnWidth=\"150\" ss:DefaultRowHeight=\"20\">");
- #endregion
- #region excel标题
- sw.WriteLine("\t\t\t<Row>");
- sw.WriteLine("\t\t\t\t<Cell ss:MergeAcross=\"{0}\" ss:StyleID=\"s68\">",ColCount-);
- sw.WriteLine("\t\t\t\t\t<Data ss:Type=\"String\">{0}</Data>",dt.TableName);
- sw.WriteLine("\t\t\t\t</Cell>");
- sw.WriteLine("\t\t\t</Row>");
- #endregion
- #region excel表头信息
- sw.WriteLine("\t\t\t<Row ss:AutoFitHeight=\"0\" ss:Height=\"15\">");
- for (CurrentCol = ; CurrentCol < ColCount; CurrentCol++)
- {
- sw.Write("\t\t\t\t<Cell ss:StyleID=\"s93\"><Data ss:Type=\"String\">{0}</Data></Cell>", dt.Columns[CurrentCol].ColumnName.ToString().Trim());
- }
- sw.WriteLine("\t\t\t</Row>");
- #endregion
- #region excel表格内容
- foreach (DataRow row in dt.Rows)
- {
- sw.WriteLine("\t\t\t<Row ss:AutoFitHeight=\"0\" ss:Height=\"15\">");
- for (CurrentCol = ; CurrentCol < ColCount; CurrentCol++)
- {
- sw.Write("\t\t\t\t<Cell ss:StyleID=\"s93\"><Data ss:Type=\"String\">");
- if (row[CurrentCol] != null)
- {
- sw.Write(row[CurrentCol].ToString().Trim());
- }
- else
- {
- sw.Write("");
- }
- sw.Write("</Data></Cell>");
- }
- sw.WriteLine("\t\t\t</Row>");
- }
- #endregion
- #region XML尾部
- sw.WriteLine("\t\t</Table>");
- sw.WriteLine("\t</Worksheet>");
- sw.WriteLine("</Workbook>");
- #endregion
- }
- catch
- { }
- finally
- {
- sw.Close();
- sw = null;
- }
- }
- }
快速写excel的方法的更多相关文章
- HTML5快速写页面的方法
1 如果有原型的HTML页面(Axure导出来),可以在此从F12的“查看器”基础上拷贝到一个新文件,继续写代码. 2 利用EditPlus软件的工具 3 使用Dreamweaver CS5,可以直观 ...
- 快速写一个babel插件
es6/7/8的出现,给我们带来了很多方便,但是浏览器并不怎么支持,目前chrome应该是支持率最高的,所以为了兼容我们只能把代码转成es5,这应该算是我们最初使用babel的一个缘由,随着业务的开发 ...
- IDEA最常用快捷键汇总+快速写出Main函数
IDEA可以说是当下Java程序员日常开发的神器,但是想要发挥这款神器的牛逼威力,必须得熟练使用它的各种快捷键才行.本篇总结下使用IDEA(也就是IntelliJ IDEA )进行日常开发中最常用的快 ...
- 实战-DRF快速写接口(认证权限频率)
实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestframework3.13 测试工具 Postma ...
- MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult
导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...
- HTML Table导出为Excel的方法
HTML Table导出为Excel的方法: 直接上源码 <html> <head> <meta http-equiv="Content-Type" ...
- VBS操作Excel常见方法
VBS操作Excel常见方法 作者: 字体:[增加 减小] 类型:转载 时间:2009-11-13我要评论 VBS控制Excel常见方法,需要的朋友可以参考下. dim oExcel,oWb,oShe ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- ASP.NET导出excel表方法汇总
asp.net里导出excel表方法汇总 1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...
随机推荐
- 在JQuery中获取URL中的参数值
添加一个js文件,代码如下 // * jQuery url get parameters function [获取URL的GET参数值] // *character_set UTF-8 // * au ...
- git版本库管理介绍,撤销git pull操作
Git是分布式版本控制系统,GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心. 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实 ...
- VS:"64位调试操作花费的时间比预期要长"的一解决途径
解决办法之一: 在命令提示符那里打入如下命令: netsh winsock reset catalognetsh int ip reset reset.log hit 重启电脑后,即可
- aop注解 自定义切面的注解写法
spring.xml中 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- 关于iOS 热更新(热修复)你必须知道的一种方法- JSPatch
本文为转载文章 . 版权归原文所有. 原文链接:iOS 5分钟集成热修复(JSPatch) 前言 在iOS中有很多种热修复方案,在这里我就不一一介绍了 这里有一篇介绍热修复的文章:iOS中的HotFi ...
- 搭建前端vue环境,安装vue-cli遇到Please try running this command again as root/Administrator的解决方案
最近在搭前端环境,装完node.js之后,准备安装vue工程的初始化工具时(npm install -g vue-cli),遇到这个坑: 大体的意思就是权限问题,导致/usr/local/lib/no ...
- centos7安装MySQL5.7无法设置密码问题
前言 在使用centos7系统yum方式安装MySQL5.7后 不知道默认密码是多少 知道后没办法修改? 一.找到MySQL密码 service mysqld start vim /var/log/ ...
- js出现Syntax error on token "catch", Identifier expected
本文转自:http://blog.csdn.net/u011159417/article/details/73916676 项目中需要使用jQuery,因此下载了jQuery的js包jquery-3. ...
- IOS开发之瀑布流照片墙实现
想必大家已经对互联网传统的照片布局方式司空见惯了,这种行列分明的布局虽然对用户来说简洁明了,但是长久的使用难免会产生审美疲劳.现在网上流行一种叫做“瀑布流”的照片布局样式,这种行与列参差不齐的状态着实 ...
- $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件.ready() 函数仅能用于当前文档,因此无需选择器.所以document选择器可以不要,那么就可以 ...