解决方案 »

  1.   

    源码NPOI.HSSF.UserModel.HSSFPictureResize可以传入一个缩放比例,按原图比例缩放图片,你试一试
            /// <summary>
            /// Reset the image to the original size.
            /// </summary>
            public void Resize(double scale)
            {
                HSSFClientAnchor anchor = (HSSFClientAnchor)Anchor;
                anchor.AnchorType = 2;            ClientAnchor pref = GetPreferredSize(scale);            int row2 = anchor.Row1 + (pref.Row2 - pref.Row1);
                int col2 = anchor.Col1 + (pref.Col2 - pref.Col1);            anchor.Col2 = col2;
                anchor.Dx1 = 0;
                anchor.Dx2 = pref.Dx2;            anchor.Row2 = row2;
                anchor.Dy1 = 0;
                anchor.Dy2 = pref.Dy2;
            }
      

  2.   

    我用的npoi 是1.2.2.0 的  Resize() 里不能带参数的
    我用.net reflector 看了下 是这样的
    public void Resize()
    {
        HSSFClientAnchor anchor = (HSSFClientAnchor) base.Anchor;
        anchor.AnchorType = 2;
        HSSFClientAnchor preferredSize = this.GetPreferredSize();
        int num = anchor.Row1 + (preferredSize.Row2 - preferredSize.Row1);
        int num2 = anchor.Col1 + (preferredSize.Col2 - preferredSize.Col1);
        anchor.Col2 = (short) num2;
        anchor.Dx1 = 0;
        anchor.Dx2 = preferredSize.Dx2;
        anchor.Row2 = num;
        anchor.Dy1 = 0;
        anchor.Dy2 = preferredSize.Dy2;
    }
    然后 我从官网下了2.0的  
    发现命名空间,代码,用法什么的都不一样了
    不会用了, 然后修改了下,
    虽然不知道怎么获取高宽 
    但通过下面这样子  还是实现了按原图比例缩放图片
    pict.Resize(1.0);
    int row2 = anchor.Row2 - anchor.Row1;
    pict.Resize(230 / (row2 * 25.5));
    但是里面除了图片其他数据都没导入xls ,部分单元格格式设置也没了
    我想在原先 1.2.2.0的基本上增加这个Resize(double scale)
    或者能方便+个QQ 帮我的操作类   修改成能在2.0里使用  -  - 
      

  3.   

    如果代码不是很大,你发我QQ邮箱,191 327 0724,去掉空格后加QQ邮箱后缀。 不一定能保证解决,我会尽量看一下。
      

  4.   

    你好,导出效果还是跟我自己修改一样
    表头和列头是正常的,就是填充内容中除了图片外 ,其他数据都没有导入xls,填充内容中的样式也失效  都是空的
      

  5.   

    我发现很奇怪的现象 ,能导入到xls里的除了图片以外,还有最后一列的数据,但其他列的数据没有
      

  6.   

    已解决   创建行放在创建列的循环里面了   ,  之前用1.2.2.0  是没关系的
                #region 填充内容
                foreach (DataColumn column in dtSource.Columns)
                {
                 IRow dataRow = sheet.CreateRow(rowIndex);
                 sheet.CreateRow(rowIndex).HeightInPoints = 176;改为
                IRow dataRow = sheet.CreateRow(rowIndex);
                sheet.CreateRow(rowIndex).HeightInPoints = 176;
                #region 填充内容
                foreach (DataColumn column in dtSource.Columns)
                {
      

  7.   

    楼主 我现在也要做一个Excel导出  并且在一个单元格内放n张图片 一般不会超过4张 且图片不能失真  看你上面的方法resize(double scale) 按比例缩放  但是这个比例怎么算啊  能教教我吗
      

  8.   

    上面引用的NPOI源文件关于图片的类HSSFPicture.cs里面提供了几个有用的函数,比如GetColumnWidthInPixels,GetRowHeightInPixels,GetImageDimension,这些可以获取单元格的宽和高,也可以获得图片的尺寸,通过这些你可以自己做些判断和计算适合的比例,然后赋值给Resize,也可以参考一下GetPreferredSize函数。