zoukankan      html  css  js  c++  java
  • .net 下比较蛋疼的word 表格转excel表格

    应朋友要求,帮忙做个小工具就方便他从word中的表格里把数据按照他们的要求转到excel表格,做了之后发现挺蛋疼的,估计是水平问题。当然主要原因还是见识不够,嘿嘿。
    对于这个小程序反正做也做了 正好做个记录以后说不定用的到。
    //这个部分是打开word文件 其实这里没啥网上资料一大把找找汇总下就成。
    object oReadOnly = true;
    object oMissing = System.Reflection.Missing.Value;

    Microsoft.Office.Interop.Word._Application oWord 
    = null;
    Microsoft.Office.Interop.Word._Document oDoc;
    oWord 
    = new Microsoft.Office.Interop.Word.Application();
    oWord.Visible 
    = true;//只是为了方便观察
    oDoc = oWord.Documents.Open(ref docfilename, ref oMissing, ref oReadOnly, ref oMissing, ref oMissing,
        
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    Microsoft.Office.Interop.Excel.ApplicationClass oExcel;
    oExcel 
    = new Microsoft.Office.Interop.Excel.ApplicationClass();
    oExcel.UserControl 
    = false;
    Microsoft.Office.Interop.Excel.WorkbookClass wb 
    = (Microsoft.Office.Interop.Excel.WorkbookClass)oExcel.Workbooks.Add(System.Reflection.Missing.Value);
    //新建一个Sheet,新建后会默认处于焦点状态
    wb.Worksheets.Add(oMissing, oMissing, 1, oMissing);
    //然后开始循环读word的内容了 
    //第一次自己用的是for循环结果那时间太给力了,等的我花都谢了,还是foreach快,这是有道理地。
    foreach (Paragraph item in oDoc.Paragraphs)
    {
        
    //下面都是自己的逻辑了没啥特别的就是 把word内容暂时读取出来丢一个list对象中。
        if (item.Range.Text != "\r\a")
        {
        
    ///。。。。都自己的逻辑
        } 
    }

    //这里开始折腾excel了就开始蛋疼了 
    int rownum = 1;
    for (int i = 0; i < ilist.Count; i++//ilist是列信息
    {
        
    if (ilist[i].DisplayName.Length == 0
        {
            oExcel.Cells[rownum, i 
    + 1= ilist[i].Mapname; //excel必须从第一行第一列开始填充数据。
        }
        
    else
        {
            oExcel.Cells[rownum, i 
    + 1= ilist[i].DisplayName;
             
        }
    }
    /// 然后经过类似上面的excel每个单元格的数据填充的过程后 终于来到结束部分

    //保存工作簿
    wb.Saved = true;
    object efileName =(Object)docfilename.ToString().Replace("doc""xls");
    //生成文件,释放资源
    //oExcel.ActiveWorkbook.SaveCopyAs(efileName + "");
    oExcel.DisplayAlerts = false;
    oExcel.ActiveWorkbook.SaveAs(efileName,XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing);

    oExcel.Quit();

     
    oDoc.Close();
    oWord.Quit(); 

    ///有没感觉怪?是的 word退出了,那个正常 excel反正没打开过,但是在进程里一看,居然有个excel在郁闷啊,查了下貌似都关不掉,只有用杀进程的办法可以直接关。当然不是指的在任务管理器里杀而是在程序里。

  • 相关阅读:
    Sqlserver 批量数据更改
    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
    SQLServer 与 MySQL
    MySQL 行号(类似SQLServer的row_number())
    c# 字符串排序 (面试题)
    c# 多线程里面创建byte数组发生内存溢出异常求解
    c# 遇到的问题,求解?
    solr-4.10.3.tgz.tgz下载
    VMware虚拟机克隆或复制linux后无法上网的解决方案
    通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明。
  • 原文地址:https://www.cnblogs.com/neverlost/p/1925345.html
Copyright © 2011-2022 走看看