一开始在读取ET文件的时候用的是etapi.dll自带插件,发现调试时会报各种各样的拒绝访问的错误,创建txt文件报【对路径“c:\\windows\\system32\\inetsrv\\sss.txt"的访问被拒绝】(安装IIS的路径),或报{检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}组件失败,原因是出现以下错误:80070005拒绝访问。。。感觉用这个插件实现不太如愿,换另一个NPOI插件!

解析ET文件使用的是NPOI,它是开源的POI项目的.NET 版,在处理Excel文件兼容xls和xlsx,不过不知道兼不兼容ET文件的不同版本,这个待考证。

NPOI使用HSSFWork类来处理xls,XSSFWorkbook类来处理xlsx,它们都继承自 IWorkbook。

上传ET文件使用的是项目特有框架传到后台进行编辑,此时从后台解析ET文件开始(WPS Excel文件简称ET文件)。。。

private int Do(Context operationContext) {

try{

if(uploadFile != null && uploadFile.InputStream.Length > 0)

{

string excelFileName = Path.GetExtension(uploadFile.FileName).ToLower();

if (!Regex.Match(excelFileName,".(xls|xlsx|et)").Success)

{

thorw new EBException("","非【Excel】文档!");

}

if (uploadFile.InputStream.Length > 500*1024*1024)

{

thorw new EBException("","文档大小不能超过5MBC# 上传WPS Excel 后台转换成txt,再压缩为ZIP!");

}

}

// 文件长度

int len = (int)uploadFile.InputStream.Length;
    byte[] buffer = new byte[len];

HSSFWorkbook hssf = new HSSFWorkbook(uploadFile.InputStream);

ISheet sheet = hssf.GetSheetAt(0);

string info = "";

// 从第二行开始解析数据

for (int i = 1 ;i <= sheet.LastRowNum; i++) {

IRow row = sheet.GetRow(i);

if(row == null)

{

break;

}

string value0 = "",value1="",value2="";

value0=GetCellValue(row.Cell[0]);

value1=GetCellValue(row.Cell[1]);

value2=GetCellValue(row.Cell[2]);

if(!string.IsNullOrEmpty(value0) || !string.IsNullOrEmpty(value1) || !string.IsNullOrEmpty(value2)){
            if(string.IsNullOrEmpty(value0)){
                 throw new EBException("","第"+(i + 1) + "行客户号为空值!");
             }
            if(value0.Trim().Length > 16){
                 throw new EBException("","第"+(i + 1) + "行客户号的长度不超过16位!");
            }
            。
            。
            。
            //校验
           }else {
               break;
            }

}

// 将读取出来的数据格式编辑
        info += value0 +"|" + value1 + "\r\n";
if(info != null && !"".Equals(info.Trim())){
            buffer = Encoding.UTF8.GetBytes(info);
         } else {
throw new EBException("上传的文件为空");
// 将编辑好的文压缩
byte[] buff =ZipOutputStream(buffer,"sss.txt");
return ok;

}

catch(Exception ex){

Console.WriteLine("调用失败");

} finally {

if (uploadFile != null && uploadFile.InputStream != null) {

uploadFile.InputStream.Close();

}

}

// 将TXT以流的形式压缩,再传递或再编辑,这里以内存流的形式进行操作的,用到的插件是ICSharpCode.SharpZipLib.dll

public static byte[] ZipOutputStream(byte[] bytes,string name){

// 内存流
 using(MemoryStream ms = MemoryStream()) {
 try{

// 创建ZIP文件

//这里在创建压缩文件流时必须用using给括起来,不知道为啥,否则压缩文件ZIP格式会报错

//用using可以不用手动释放,。。
  using(ZipOutputStream zout = new ZipOutputStream(ms)){
   zout.UseZip64 = UseZip6.Off;

//将编辑好的字节流添加 到ZIP包中
   zout.PutNextEntry(new ZipEntry(name));
   zout.Write(bytes, 0, bytes.length);
  }
  byte[] zipBuffer = ms.toArrya();
  return zipBuffer;
 }
 }

private string GetCellValue(ICell cell)
{
 if(cell == null){
  return string.Empty;
 }
 
 switch (cell.CellType)
 {
  case CellType.Blank:
      return string.Empty;
  case CellType.Boolean:
      return cell.BooleanCellValue.ToString();
  case CellType.Error:
      return cell.ErrorCellValue.ToString();
  case CellType.String:
      return cell.StringCellValue();
  case CellType.Formula:
      try{
       HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
       e.EvaluateInCell(cell);
       return cell.ToString();
      }
      catch {
       return cell.NumericCellValue.ToString();
      }
  case CellType.Numeric:
  case CellType.Unknown:
  default:
      return cell.ToString();
 }
}
}

部分代码参照:http://blog.csdn.net/zhouqinghe24/article/details/8649346

http://www.cnblogs.com/lazyneal/p/6148912.html

C# 上传WPS Excel 后台转换成txt,再压缩为ZIP相关推荐

  1. ASP.Net中实现上传过程中将文本文件转换成PDF的方法

    iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们 ...

  2. vue-tinymce的使用,粘贴文件上传,自定义文件上传,改base64转换成上传到服务器返回url

    vue-tinymce的使用,粘贴文件上传,自定义文件上传,改base64转换成上传到服务器返回url vue中使用 <vue-tinymcev-model="itemForm.con ...

  3. 文件上传至将File转换成MultiPartFile

    在文件上传业务上需要将文件上传至将File转换成MultiPartFile的时候,我搜索得到采用MockMultipartFile这个类可以轻松的转换. 但是,当我准备使用的时候,坑出现了.它是spr ...

  4. Excel文件转换成.txt格式

    Excel文件转换成.txt格式 如果直接把后缀名.xls修改为.txt可能会导致文件不可用,可以选择将文件另存为.txt格式. 点击[文件]->[另存为],再选择.txt格式即可.

  5. java将excel文件转换成txt格式文件

    在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件.下面代码里面提供对xls.xlsx两种格式的excel文件解析,并写入到一个新的txt文 ...

  6. JAVA如何实现将用户上传的PDF文件转换成图片并返回给用户

    很多曾经攻克过的难题都没有及时记录并分享,觉得有些可惜.趁着现在还单身,头还没秃,精力也还算旺盛,我便整理出一些自己曾经挑灯夜战.独立实现的还算有些成就感的项目需求,记录在个人博客上,希望能给拥有相同 ...

  7. 利用openoffice将上传办公文档转换成PDF或者html

    前导: 开发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实现转换文档. openoffice既有windows版本 ...

  8. excel表转换成txt导入

    insert into t_user(userid,username,usercard,corpid,roleid,phone,useradd,userpost,usermail,userpasswd ...

  9. pdf转换成txt转换器有哪些

    很多用户在使用不同的pdf转换成txt转换器进行转换的时候,经常可以发现大部分的PDF转换成TXT转换器的转换质量难以令人满意.除了转换出来的TXT文件内容与原PDF文件内容大相径庭之外,很多时候这些 ...

最新文章

  1. 数据处理过程放在oracle,Oracle存储过程语法及常用函数总结
  2. Spark Shuffle两种Manager
  3. 江南山区腊味香 年味浓
  4. 阿里舆情︱舆情热词分析架构简述(Demo学习)
  5. 21秋期末考试工程项目管理10324k2
  6. 基于Python的指数基金量化投资 - 正三角和倒三角投资模型
  7. 程序员如何阅读英文文档
  8. DDD之Repository模式
  9. 金蝶K3 SQL报表系列-委外未勾稽明细表
  10. access与project与python的区别_Access与 Excel区别
  11. 女生找工作,非常有用,好好 收藏,以后肯定能用得上 (转)
  12. 发现了一个好玩的SQL函数-soundex()
  13. 面试中 项目遇见的难点答案_你和offer之间只差这几个面试问题!常见面试问题汇总...
  14. VS2010开发体验系列之二 - 语言C#4.0
  15. OpenStack 性能测试工具Rally使用
  16. Centos7虚拟机下安装配置Tomcat
  17. 分面导航的详细操作方案
  18. chrom如何兼容本地file文件
  19. TSN(Temporal Segment Networks)算法笔记
  20. 猫叔产品读记 | 爆款车厘子、重做消费品、旅游大数据(1期) 1

热门文章

  1. 映美Jolimark FP-650K 打印机驱动
  2. 如何看懂k线图应该从基础的知识入手
  3. 大牛总结 Elastic Search 概述(一)
  4. MBA案例分析(管理之道在于“借力”三)
  5. c++-tissue_habit-namespace
  6. 保护模式超强的寻址功能:天空任鸟飞
  7. matlab仿真直流输电接地极系统,轻型高压直流输电系统的MATLAB仿真
  8. 霍常亮教你开发淘宝客app第2节
  9. YOLOX训练自己标注的数据集
  10. 判断两个向量是否垂直