Ionic.Utils.Zip大全

项目开发中用到了Koogra,处理excel2007时遇到Invalid header magic number的问题。不得不吐嘈一下关于Koogra的资源是真的少,不过好再找到了问题的根源:Koogra读取2003和2007是不一样的,需要写两个不同的配置类。代码稍后贴出来(也是网上找的)。

但是在使用过程中,编译项目时new Net.SourceForge.Koogra.Excel2007.Workbook报错,提示缺少Ionic.Utils.Zip.dll的引用。于是到网上down了一个引用进来,编译通过了,但在运行时又报黄页了,看了一下错误提示,Koogra引用了个1.3.0版本的Ionic.Utils.Zip。 找半天终于找着了1.3.0版本的dll,整理了一下,有需要的自行下载吧。

Ionic.Utils.Zip.dll下载

压缩包中包含以下版本:
1.3.0.0
1.4.0.3
1.5.0.11
1.5.2.1
1.6.3.10
1.6.3.11
1.6.3.14
1.7.1.10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
using Net.SourceForge.Koogra.Excel;
using System;
using System.Collections.Generic;
using System.Data;

namespace ZhiGu.SMS.Platform.Common
{
    /// <summary>
    /// Excel工具类
    /// </summary>
    public class ExcelUtility
    {
        #region Http流方式导出
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objList"></param>
        /// <param name="columnInfo">Key:列名,Value:别名</param>
        /// <param name="FileName"></param>
        public void ExportExcel<T>(List<T> objList, Dictionary<string, string> columnInfo, string FileName)
        {
            if (columnInfo.Count == 0) { return; }

            if (objList.Count == 0) { return; }

            //生成EXCEL的HTML
            string excelStr = "";

            Type myType = objList[0].GetType();

            //根据反射从传递进来的属性名信息得到要显示的属性
            List<System.Reflection.PropertyInfo> myPro = new List<System.Reflection.PropertyInfo>();

            foreach (string cName in columnInfo.Keys)
            {
                System.Reflection.PropertyInfo p = myType.GetProperty(cName);

                if (p != null)
                {
                    myPro.Add(p);

                    excelStr += columnInfo[cName] + "\t";
                }
            }
            //如果没有找到可用的属性则结束
            if (myPro.Count == 0) { return; }

            excelStr += "\n";

            foreach (T obj in objList)
            {
                foreach (System.Reflection.PropertyInfo p in myPro)
                {
                    excelStr += p.GetValue(obj, null) + "\t";
                }

                excelStr += "\n";
            }

            //输出EXCEL
            var rs = System.Web.HttpContext.Current.Response;

            //rs.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            rs.ContentEncoding = System.Text.Encoding.UTF8;

            rs.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);

            rs.ContentType = "application/ms-excel";

            rs.Write(excelStr);

            rs.End();
        }
        #endregion

        #region 转换为DataTable
        private Workbook book;

        public ExcelUtility(string path)
        {
            this.book = new Workbook(path);
        }

        public ExcelUtility(System.IO.Stream stream)
        {
            this.book = new Workbook(stream);
        }

        protected DataTable SaveAsDataTable(Worksheet sheet)
        {
            DataTable dt = new DataTable();
            uint minRow = sheet.Rows.MinRow;
            uint maxRow = sheet.Rows.MaxRow;
            Row firstRow = sheet.Rows[minRow];
            uint minCol = firstRow.Cells.MinCol;
            uint maxCol = firstRow.Cells.MaxCol;
            for (uint i = minCol; i <= maxCol; i++)
            {
                dt.Columns.Add(firstRow.Cells[i].FormattedValue());
            }
            for (uint i = minRow + 1; i <= maxRow; i++)
            {
                Row row = sheet.Rows[i];
                if (row != null)
                {
                    DataRow dr = dt.NewRow();
                    for (uint j = minCol; j <= maxCol; j++)
                    {
                        Cell cell = row.Cells[j];
                        if (cell != null)
                        {
                            dr[Convert.ToInt32(j)] = cell.Value != null ? cell.Value.ToString() : string.Empty;
                        }
                    }
                    dt.Rows.Add(dr);
                }
            }
            return dt;
        }

        public DataTable ToDataTable(int index)
        {
            Worksheet sheet = this.book.Sheets[index];
            if (sheet == null)
            {
                throw new ApplicationException(string.Format("索引[{0}]所指定的电子表格不存在!", index));
            }
            return this.SaveAsDataTable(sheet);
        }

        public DataTable ToDataTable(string sheetName)
        {
            Worksheet sheet = this.book.Sheets.GetByName(sheetName);
            if (sheet == null)
            {
                throw new ApplicationException(string.Format("名称[{0}]所指定的电子表格不存在!", sheetName));
            }
            return this.SaveAsDataTable(sheet);
        }

        /// <summary>
        /// 转换为DataTable(文件路径+表名)
        /// </summary>
        public static DataTable TranslateToTable(string path, string sheetName)
        {
            ExcelUtility utils = new ExcelUtility(path);
            return utils.ToDataTable(sheetName);
        }

        /// <summary>
        /// 转换为DataTable(文件路径+表索引)
        /// </summary>
        public static DataTable TranslateToTable(string path, int sheetIndex)
        {
            ExcelUtility utils = new ExcelUtility(path);
            return utils.ToDataTable(sheetIndex);
        }

        /// <summary>
        /// 转换为DataTable(文件路径)
        /// </summary>
        public static DataTable TranslateToTable(string path)
        {
            ExcelUtility utils = new ExcelUtility(path);
            return utils.ToDataTable(0);
        }

        /// <summary>
        /// 转换为DataTable(内存流+表名)
        /// </summary>
        public static DataTable TranslateToTable(System.IO.Stream stream, string sheetName)
        {
            ExcelUtility utils = new ExcelUtility(stream);
            return utils.ToDataTable(sheetName);
        }

        /// <summary>
        /// 转换为DataTable(内存流+表索引)
        /// </summary>
        public static DataTable TranslateToTable(System.IO.Stream stream, int sheetIndex)
        {
            ExcelUtility utils = new ExcelUtility(stream);
            return utils.ToDataTable(sheetIndex);
        }

        /// <summary>
        /// 转换为DataTable(内存流)
        /// </summary>
        public static DataTable TranslateToTable(System.IO.Stream stream)
        {
            ExcelUtility utils = new ExcelUtility(stream);
            return utils.ToDataTable(0);
        }
        #endregion
    }

    /// <summary>
    /// Excel2007工具类
    /// </summary>
    public class ExcelUtility2007
    {
        private Net.SourceForge.Koogra.Excel2007.Workbook book;

        public ExcelUtility2007(string path)
        {
            this.book = new Net.SourceForge.Koogra.Excel2007.Workbook(path);
        }

        public ExcelUtility2007(System.IO.Stream stream)
        {
            this.book = new Net.SourceForge.Koogra.Excel2007.Workbook(stream);
        }

        protected DataTable SaveAsDataTable(Net.SourceForge.Koogra.Excel2007.Worksheet sheet)
        {
            DataTable dt = new DataTable();
            uint minRow = sheet.CellMap.FirstRow;
            uint maxRow = sheet.CellMap.LastRow;
            Net.SourceForge.Koogra.Excel2007.Row firstRow = sheet.GetRow(minRow);
            uint minCol = sheet.CellMap.FirstCol;
            uint maxCol = sheet.CellMap.LastCol;
            for (uint i = minCol; i <= maxCol; i++)
            {
                dt.Columns.Add(firstRow.GetCell(i).GetFormattedValue());
            }
            for (uint i = minRow + 1; i <= maxRow; i++)
            {
                Net.SourceForge.Koogra.Excel2007.Row row = sheet.GetRow(i);
                if (row != null)
                {
                    DataRow dr = dt.NewRow();
                    for (uint j = minCol; j <= maxCol; j++)
                    {
                        Net.SourceForge.Koogra.ICell cell = row.GetCell(j);
                        if (cell != null)
                        {
                            dr[Convert.ToInt32(j)] = cell.Value != null ? cell.Value.ToString() : string.Empty;
                        }
                    }
                    dt.Rows.Add(dr);
                }
            }
            return dt;
        }

        public DataTable ToDataTable(int index)
        {
            Net.SourceForge.Koogra.Excel2007.Worksheet sheet = this.book.GetWorksheet(0);
            if (sheet == null)
            {
                throw new ApplicationException(string.Format("索引[{0}]所指定的电子表格不存在!", index));
            }
            return this.SaveAsDataTable(sheet);
        }

        public DataTable ToDataTable(string sheetName)
        {
            Net.SourceForge.Koogra.Excel2007.Worksheet sheet = this.book.GetWorksheetByName(sheetName);
            if (sheet == null)
            {
                throw new ApplicationException(string.Format("名称[{0}]所指定的电子表格不存在!", sheetName));
            }
            return this.SaveAsDataTable(sheet);
        }

        #region 静态方法
        /// <summary>
        /// 单元格格式为日期时间,使用此方法转换为DateTime类型,若解析失败则返回‘0001-01-01’
        /// </summary>        
        public static DateTime ParseDateTime(string cellValue)
        {
            DateTime date = default(DateTime);
            double value = default(double);
            if (double.TryParse(cellValue, out value))
            {
                date = DateTime.FromOADate(value);
            }
            else
            {
                DateTime.TryParse(cellValue, out date);
            }
            return date;
        }

        /// <summary>
        /// 转换为DataTable(文件路径 表名)
        /// </summary>    
        public static DataTable TranslateToTable(string path, string sheetName)
        {
            ExcelUtility2007 utils = new ExcelUtility2007(path);
            return utils.ToDataTable(sheetName);
        }

        /// <summary>
        /// 转换为DataTable(文件路径 表索引)
        /// </summary>        
        public static DataTable TranslateToTable(string path, int sheetIndex)
        {
            ExcelUtility2007 utils = new ExcelUtility2007(path);
            return utils.ToDataTable(sheetIndex);
        }

        /// <summary>
        /// 转换为DataTable(文件路径)
        /// </summary>      
        public static DataTable TranslateToTable(string path)
        {
            ExcelUtility2007 utils = new ExcelUtility2007(path);
            return utils.ToDataTable(0);
        }

        /// <summary>
        /// 转换为DataTable(内存流 表名)
        /// </summary>      
        public static DataTable TranslateToTable(System.IO.Stream stream, string sheetName)
        {
            ExcelUtility2007 utils = new ExcelUtility2007(stream);
            return utils.ToDataTable(sheetName);
        }

        /// <summary>
        /// 转换为DataTable(内存流 表索引)
        /// </summary>      
        public static DataTable TranslateToTable(System.IO.Stream stream, int sheetIndex)
        {
            ExcelUtility2007 utils = new ExcelUtility2007(stream);
            return utils.ToDataTable(sheetIndex);
        }

        /// <summary>
        /// 转换为DataTable(内存流)
        /// </summary>      
        public static DataTable TranslateToTable(System.IO.Stream stream)
        {
            ExcelUtility2007 utils = new ExcelUtility2007(stream); return utils.ToDataTable(0);
        }
        #endregion
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注