【问题标题】:Excel Cell Value Replacement with other value in C# Windows ApplicationExcel 单元格值替换为 C# Windows 应用程序中的其他值
【发布时间】:2012-10-06 16:12:30
【问题描述】:
我正在使用 .NET C# 开发 Windows 应用程序。我必须用其他一些文本(我从数据库中获取)替换 Excel 单元格内容。我需要做的是用数据库中的实际值替换 Excel 的值。 (例如,“CustomerName”将替换为“John”,“CustomerCompanyName”将替换为“GE”等)。此外,如果某些值不存在,则该空白区域将与其以下值重叠。
我们如何实现这个东西?
【问题讨论】:
标签:
c#
.net
excel
printing
replace
【解决方案1】:
这取决于。
如果这些只是工作表中的静态值,并且您不希望在更新它们时在 excel 中执行计算,那么只需使用 OpenXml 编辑电子表格。
否则您将不得不使用 Office Interopt 或某些第三方 excel 库。
【解决方案2】:
我正在使用来自http://www.tmssoftware.net/(无从属关系)的 FlexCel,它很棒。价格合理、速度快、所有托管代码和开发人员似乎知道他在说什么,并且对查询也非常敏感。
比 Office Interop 库恕我直言要好 1000%。
过去我通过互操作库访问 Excel,对于服务器,我使用 ODBC/OLE-DB 驱动程序,但总是遇到困难。
【解决方案3】:
如果您想使用 OpenXml,here 您将了解如何读取 Excel 文档单元格的值,here 用于在单元格中写入值。
您可以使用的另一个免费库是NPOI。这些说明让您初步了解如何读取/写入单元格的数据并保存修改后的文件:
FileStream aFile = new FileStream(@"c:\tmp\foo.xls", FileMode.Open, FileAccess.Read);
HSSFWorkbook wb = new HSSFWorkbook(aFile);
aFile.Close();
ISheet ws = wb.GetSheet("Worksheet1");
IRow aRow = curSheet.GetRow(aRowIdx);
if (aRow == null)
aRow = curSheet.CreateRow(aRowIdx);
ICell aCell = aRow.GetCell(aColIdx);
if (aCell == null)
aCell = aRow.CreateCell(aColIdx);
string sValue = aCell.StringCellValue; // here the value is read
sValue = sValue + " MODIFIED";
aCell.SetCellValue(sValue); // here it is written
aFile = new FileStream(@"c:\tmp\bar.xls", FileMode.Create);
wb.Write(aFile);
aFile.Close();