当前位置:网络安全 > vs2010封装宝_让C# Excel导入导出,支持不同版本的Office - biyusr的专栏 - CSDN博客

vs2010封装宝_让C# Excel导入导出,支持不同版本的Office - biyusr的专栏 - CSDN博客

  • 发布:2023-09-23 07:25

VS2010每次编译都重新编译整个工程的解决方案

参考文章:

(1)VS2010每次编译都重新编译整个工程的解决方案

(2)https://www.sychzs.cn/qintangtao/p/3759030.html

备忘一下。

error LNK2001: 无法解析的外部符号 "__declspec(dllimport) protected: virtual void __thiscall QWidget::changeEvent(class QEvent *)" (__imp_?changeEvent@QWidget@@MAEXPAVQEvent@@@Z) Qt_ProfileName.obj

error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static struct QMetaObject const QDialog::staticMetaObject" (__imp_?staticMetaObject@QDialog@@2UQMetaObject@@B),该符号在函数 "private: static void __cdecl MainForm::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@MainForm@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z) 中被引用 moc_Qt_MainForm.obj

等错误是QT初学者经常犯的错误,错误原因可能有:

1.在继承QObject类里忘了加Q_OBJECT宏

2.未能成功moc 含有Q_OBJECT宏的类

3.没有在项目的筛选器里导入moc文件

4.没有导入Qt GUI需要用的lib

5.没有指明Qt GUI 到用的lib的路径

http://www.sychzs.cn/article/13657.html

问题:最近在项目中遇到,不同客户机安装不同Office版本,在导出Excel时,发生错误。

找不到Excel Com组件,错误信息如下。

未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。

解决方法:

1.引用高版本的的Excel.dll组件,最新版本14.0.0 防止客户安装高版本如Office不能导出。

  (DLL组件可以兼容低版本,不能兼容高版本)

2.右键DLL属性,将引用的Excel.dll组件,嵌入互操作类型为True,特定版本=false .这一步非常关键。

    嵌入互操作类型改成True后,生成时可能现有调用Excel的代码会报错,引用Microsoft.CSharp命名空间,可以解决此问题。

3.引用Excel14.0.0 DLL组件方法,vs2012 右键添加引用->程序集->扩展->Microsoft.Office.Interop.Excel

  Excel.dll http://www.sychzs.cn/files/ichk/Microsoft.Office.Interop.Excel.rar

导入导出的其他方法:

  1.使用NPOI.DLL开源组件,可以不安装Office软件,进行读写Excel文件。

  NPIO.dll?http://www.sychzs.cn/files/ichk/NPOI.rar

调用方法如下:

导出代码:

[csharp]?

view plain

?copy

///?

?? ?///?DataTable导出到Excel的MemoryStream?Export()?? ?///??? ?///?DataTable数据源?? ?///?Excel表头文本(例如:车辆列表)?? ?public?static?MemoryStream?Export(DataTable?dtSource,?string?strHeaderText)?? ?{?? ?????HSSFWorkbook?workbook?=?new?HSSFWorkbook();?? ?????ISheet?sheet?=?workbook.CreateSheet();?? ??????? ?????#region?右击文件?属性信息?? ?????{?? ?????????DocumentSummaryInformation?dsi?=?PropertySetFactory.CreateDocumentSummaryInformation();?? ?????????dsi.Company?=?"NPOI";?? ?????????workbook.DocumentSummaryInformation?=?dsi;?? ??? ?????????SummaryInformation?si?=?PropertySetFactory.CreateSummaryInformation();?? ?????????www.sychzs.cn?=?"文件作者信息";?//填加xls文件作者信息?? ?????????si.ApplicationName?=?"创建程序信息";?//填加xls文件创建程序信息?? ?????????si.LastAuthor?=?"最后保存者信息";?//填加xls文件最后保存者信息?? ?????????si.Comments?=?"作者信息";?//填加xls文件作者信息?? ?????????si.Title?=?"标题信息";?//填加xls文件标题信息?? ?????????si.Subject?=?"主题信息";//填加文件主题信息?? ?????????si.CreateDateTime?=?www.sychzs.cn;?? ?????????workbook.SummaryInformation?=?si;?? ?????}?? ?????#endregion?? ??? ?????ICellStyle?dateStyle?=?workbook.CreateCellStyle();?? ?????IDataFormat?format?=?workbook.CreateDataFormat();?? ?????dateStyle.DataFormat?=?format.GetFormat("yyyy-mm-dd");?? ???????? ?????//取得列宽?? ?????int[]?arrColWidth?=?new?int[dtSource.Columns.Count];?? ?????foreach?(DataColumn?item?in?dtSource.Columns)?? ?????{?? ?????????arrColWidth[item.Ordinal]?=?Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;?? ?????}?? ?????for?(int?i?=?0;?i??arrColWidth[j])?? ?????????????{?? ?????????????????arrColWidth[j]?=?intTemp;?? ?????????????}?? ?????????}?? ?????}?? ?????int?rowIndex?=?0;?? ?????foreach?(DataRow?row?in?dtSource.Rows)?? ?????{?? ?????????#region?新建表,填充表头,填充列头,样式?? ?????????if?(rowIndex?==?65535?||?rowIndex?==?0)?? ?????????{?? ?????????????if?(rowIndex?!=?0)?? ?????????????{?? ?????????????????sheet?=?workbook.CreateSheet();?? ?????????????}?? ?? ?????????????#region?表头及样式?? ?????????????{?? ?????????????????IRow?headerRow?=?sheet.CreateRow(0);?? ?????????????????headerRow.HeightInPoints?=?25;?? ?????????????????headerRow.CreateCell(0).SetCellValue(strHeaderText);?? ??? ?????????????????ICellStyle?headStyle?=?workbook.CreateCellStyle();?? ?????????????????headStyle.Alignment?=?www.sychzs.cn;??? ?????????????????IFont?font?=?workbook.CreateFont();?? ?????????????????font.FontHeightInPoints?=?20;?? ?????????????????font.Boldweight?=?700;?? ?????????????????headStyle.SetFont(font);?? ?????????????????headerRow.GetCell(0).CellStyle?=?headStyle;?? ?????????????????sheet.AddMergedRegion(new?NPOI.SS.Util.CellRangeAddress(0,?0,?0,?dtSource.Columns.Count?-?1));??? ?????????????}?? ?????????????#endregion?? ?? ?????????????#region?列头及样式?? ?????????????{?? ?????????????????IRow?headerRow?=?sheet.CreateRow(1);?? ?????????????????ICellStyle?headStyle?=?workbook.CreateCellStyle();?? ?????????????????headStyle.Alignment?=?www.sychzs.cn;??? ?????????????????IFont?font?=?workbook.CreateFont();?? ?????????????????font.FontHeightInPoints?=?10;?? ?????????????????font.Boldweight?=?700;?? ?????????????????headStyle.SetFont(font);?? ?????????????????foreach?(DataColumn?column?in?dtSource.Columns)?? ?????????????????{?? ?????????????????????headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);?? ?????????????????????headerRow.GetCell(column.Ordinal).CellStyle?=?headStyle;?? ??? ?????????????????????//设置列宽?? ?????????????????????sheet.SetColumnWidth(column.Ordinal,?(arrColWidth[column.Ordinal]?+?1)?*?256);?? ?????????????????}?? ?????????????}?? ?????????????#endregion?? ??????????????rowIndex?=?2;?? ?????????}?? ?????????#endregion?? ?? ?????????#region?填充内容?? ?????????IRow?dataRow?=?sheet.CreateRow(rowIndex);?? ?????????foreach?(DataColumn?column?in?dtSource.Columns)?? ?????????{?? ?????????????ICell?newCell?=?dataRow.CreateCell(column.Ordinal);?? ??????????????string?drValue?=?row[column].ToString();?? ??????????????switch?(column.DataType.ToString())?? ?????????????{?? ?????????????????case?"System.String"://字符串类型?? ?????????????????????newCell.SetCellValue(drValue);?? ?????????????????????break;?? ?????????????????case?"System.DateTime"://日期类型?? ?????????????????????System.DateTime?dateV;?? ?????????????????????System.DateTime.TryParse(drValue,?out?dateV);?? ?????????????????????newCell.SetCellValue(dateV);?? ??? ?????????????????????newCell.CellStyle?=?dateStyle;//格式化显示?? ?????????????????????break;?? ?????????????????case?"System.Boolean"://布尔型?? ?????????????????????bool?boolV?=?false;?? ?????????????????????bool.TryParse(drValue,?out?boolV);?? ?????????????????????newCell.SetCellValue(boolV);?? ?????????????????????break;?? ?????????????????case?"www.sychzs.cn16"://整型?? ?????????????????case?"www.sychzs.cn32":?? ?????????????????case?"www.sychzs.cn64":?? ?????????????????case?"System.Byte":?? ?????????????????????int?intV?=?0;?? ?????????????????????int.TryParse(drValue,?out?intV);?? ?????????????????????newCell.SetCellValue(intV);?? ?????????????????????break;?? ?????????????????case?"System.Decimal"://浮点型?? ?????????????????case?"System.Double":?? ?????????????????????double?doubV?=?0;?? ?????????????????????double.TryParse(drValue,?out?doubV);?? ?????????????????????newCell.SetCellValue(doubV);?? ?????????????????????break;?? ?????????????????case?"System.DBNull"://空值处理?? ?????????????????????newCell.SetCellValue("");?? ?????????????????????break;?? ?????????????????default:?? ?????????????????????newCell.SetCellValue("");?? ?????????????????????break;?? ?????????????}?? ?????????}?? ?????????#endregion?? ??? ?????????rowIndex++;?? ?????}?? ?????using?(MemoryStream?ms?=?new?MemoryStream())?? ?????{?? ?????????workbook.Write(ms);?? ?????????ms.Flush();?? ?????????ms.Position?=?0;?? ?????????sheet.Dispose();?? ?????????return?ms;?? ?????}?? ?}??

导入代码:

[csharp]?

view plain

?copy

///?

?? ///?读取excel?,默认第一行为标头?? ///??? ///?excel文档路径?? ///??? public?static?DataTable?Import(string?strFileName)?? {?? ????DataTable?dt?=?new?DataTable();?? ??? ????HSSFWorkbook?hssfworkbook;?? ????using?(FileStream?file?=?new?FileStream(strFileName,?www.sychzs.cn,?www.sychzs.cn))?? ????{?? ????????hssfworkbook?=?new?HSSFWorkbook(file);?? ????}?? ????ISheet?sheet?=?hssfworkbook.GetSheetAt(0);?? ????System.Collections.IEnumerator?rows?=?sheet.GetRowEnumerator();?? ??? ????IRow?headerRow?=?sheet.GetRow(0);?? ????int?cellCount?=?headerRow.LastCellNum;?? ??? ????for?(int?j?=?0;?j?

2.使用C#发射方式调用Excel进行,不需要引用Excel.dll组件。此种方法不建议,太麻烦,也需要安装Office。

调用方法如下:

[csharp]?

view plain

?copy

private?void?Export2Excel(DataGridView?datagridview,?bool?captions)?? ?????{?? ?????????object?objApp_Late;?? ?????????object?objBook_Late;?? ?????????object?objBooks_Late;?? ?????????object?objSheets_Late;?? ?????????object?objSheet_Late;?? ?????????object?objRange_Late;?? ?????????object[]?Parameters;?? ?? ?????????string[]?headers?=?new?string[datagridview.DisplayedColumnCount(true)];?? ?????????string[]?columns?=?new?string[datagridview.DisplayedColumnCount(true)];?? ?????????string[]?colName?=?new?string[datagridview.DisplayedColumnCount(true)];?? ?? ?????????int?i?=?0;?? ?????????int?c?=?0;?? ?????????int?m?=?0;?? ?? ?????????for?(c?=?0;?c?

导出

[csharp]?

view plain

?copy

System.Type?ExcelType?=?System.Type.GetTypeFromProgID("Excel.Application");?? Microsoft.Office.Interop.Excel.Application?obj?=?Activator.CreateInstance(ExcelType)?as?Microsoft.Office.Interop.Excel.Application;??

相关文章

最新资讯