C# 上传WPS Excel 后台转换成txt,再压缩为ZIP
来源:互联网 发布:离婚率 知乎 编辑:程序博客网 时间:2024/05/22 16:02
一开始在读取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";
buffer = Encoding.UTF8.GetBytes(info);
} else {
}
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
- C#调用WPS转换WORD,EXCEL,PPT文件为PDF
- excel表格转换为甘特图(wps)
- txt文件转换为Excel.rar
- python 将txt文件转换为excel
- c#实现txt转化为excel
- C#中对上传的Txt文档进行编码的转换,并且不会乱码,其他编码转换为UTF-8
- 如何将Excel转换成txt,txt转为Excel
- c#操作wps中的excel
- C#实现EXCEL数据转换到TXT文档
- delphi--csv,txt文本转换成excel
- TXT转换EXCEL
- C# datagridview 转换为 word excel
- C# 将Excel转换为PDF
- 上传Excel转换成DataTable
- txt 转换为 xml
- txt转换为mat
- C#操作WPS的EXCEL表格
- 垂死病中惊坐起,原来我还不懂
- 一元多项式的乘法与加法运算 (模拟)
- 集成学习(ensemble learning)之AdaBoost
- linux下安装yaf
- c2541 simpleBLEPeripheral工程 应用层协议栈分析
- C# 上传WPS Excel 后台转换成txt,再压缩为ZIP
- 【Grammar】And 和 With有什么区别???他们又有什么用?
- Java反射机制
- ubuntu 编译android 源码时Openjdk 问题
- hive 安装
- [洛谷P1658]购物
- cordova启动页面和图标的设置
- 舍得舍得,有舍才有得
- 每次打开unity脚本都新开一个vs解决方法