您的位置:首页 > 其它

项目总结【Excel中附件导出和导入】

2012-03-09 16:09 78 查看
  公司两年前开发了一个项目电子平台,其中有一个模块是"项目问题清单",这个模块主要是让工程师记录项目的问题并跟踪,但是由于很多工程师不能在外网访问和录入表单时不够方便,所以用户提出了采用Excel导入功能。

  这个问题清单主要功能有以下几点:

1.表结构是主从表关系,一个问题对应对个行动计划

2.一个问题中可以插入图片和附件

3.邮件提醒功能

4.允许将问题清单导入和导出(图片和附件必须跟上)

其中,最为纠结的是Excel中插入或导出附件这个功能。

最新的解决方案是用NPOI方式来操作,但是经分析,NPOI仅支持图片的导出,虽然有返回图片的对象,但是不能获取到指定单元格的图片,还有一个就是不支持2007和附件的插入

后来采用了DocumentFormat.OpenXml.dll这个东西。

以下具体讲讲这个中间的过程。

1.用Open Xml SDK 2.0将做好的模板生成代码,对代码分析和封装

说说其中的对象:SharedStringTablePart 共享数据部件

        DrawingsPart 图片部件

        ThemePart 主题部件

        WorkbookStylesPart 样式部件

        WorksheetPart sheet部件

        VmlDrawingPart 绘图对象

        EmbeddedPackagePart 嵌入包部件

2.导出遇到的问题

2.1 导出的图片自动旋转180了,主要修改这段代码 A.Transform2D transform2D = new A.Transform2D()即可;

2.2 附件.pptx次序颠倒,最后一个附件跑到第一个位置了,研究发现有一段是拼接字符串的东东,代码封装如下:

View Code

/// <summary>
/// Author:严智远  Remark:将流填充到ImagePart对象中  Date:2012-02-18
/// </summary>
/// <param name="imagePart3"></param>
private void GenerateImagePartContent(ImagePart imagePart, string filePath)
{
//将图片转换成字符
System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath("~")+filePath);
MemoryStream stream = new MemoryStream();
bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
stream.Position = 0;
byte[] buff = new byte[stream.Length];
stream.Read(buff, 0, (int)stream.Length);
stream.Close();

System.IO.Stream data = GetBinaryDataStream(System.Convert.ToBase64String(buff, 0, buff.Length));
imagePart.FeedData(data);
data.Close();
}


2.IO操作、linq操作对象

3..vml后缀文件的了解

4.如何查看及分析问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: