返回
如何在 Windows 服务中将 XLSX 文件转换为 CSV 并解决 #NAME? 错误?
windows
2024-03-03 21:48:32
Windows 服务中将 XLSX 转换为 CSV 的指南
问题:#NAME? 错误和 Excel 访问
在 Windows 服务中将 XLSX 文件转换为 CSV 时,你可能会遇到 #NAME? 错误。这可能是由于服务无法访问 Excel 文件或刷新计算所致。
解决方法:
XLSX 到 CSV 转换错误
检查服务是否具有对 Excel 文件所在文件夹的完全访问权限。确保服务可以写入值,因为它可能无法刷新计算。
Windows 服务访问 Excel
Windows 服务可以通过 Microsoft.Office.Interop.Excel 程序集访问 Excel 文件。这个程序集允许与 Microsoft Office 应用程序(包括 Excel)进行互操作。
代码示例:
using Microsoft.Office.Interop.Excel;
using System.IO;
namespace ExcelConversionService
{
public class ExcelConverter
{
public void ConvertXlsxToCsv(string excelFilePath, string csvFilePath)
{
Application excel = new Application();
Workbook workbook = excel.Workbooks.Open(excelFilePath);
workbook.Calculate();
StreamWriter csvWriter = new StreamWriter(csvFilePath);
foreach (Worksheet worksheet in workbook.Worksheets)
{
for (int row = 1; row <= worksheet.UsedRange.Rows.Count; row++)
{
csvWriter.WriteLine(string.Join(",", Enumerable.Range(1, worksheet.UsedRange.Columns.Count)
.Select(col => using Microsoft.Office.Interop.Excel;
using System.IO;
namespace ExcelConversionService
{
public class ExcelConverter
{
public void ConvertXlsxToCsv(string excelFilePath, string csvFilePath)
{
Application excel = new Application();
Workbook workbook = excel.Workbooks.Open(excelFilePath);
workbook.Calculate();
StreamWriter csvWriter = new StreamWriter(csvFilePath);
foreach (Worksheet worksheet in workbook.Worksheets)
{
for (int row = 1; row <= worksheet.UsedRange.Rows.Count; row++)
{
csvWriter.WriteLine(string.Join(",", Enumerable.Range(1, worksheet.UsedRange.Columns.Count)
.Select(col => $"{worksheet.Cells[row, col].Value}")));
}
}
workbook.Close();
excel.Quit();
csvWriter.Close();
}
}
}
quot;{worksheet.Cells[row, col].Value}")));
}
}
workbook.Close();
excel.Quit();
csvWriter.Close();
}
}
}
步骤:
- 使用 Microsoft.Office.Interop.Excel 程序集打开并计算 Excel 文件。
- 创建一个流写入器来写入 CSV 文件。
- 遍历工作表,逐行将单元格值写入 CSV 文件。
- 关闭工作簿、Excel 应用程序和 CSV 写入器。
注意事项:
- 确保已安装 Microsoft Office Interop 程序集。
- 授予服务对 Excel 文件的完全访问权限。
- 使用具有足够文件系统访问权限的服务标识运行服务。
结论:
使用本文中的解决方案,你可以解决 Windows 服务中将 XLSX 转换为 CSV 时出现的 #NAME? 错误并允许服务访问 Excel 文件。
常见问题解答:
-
为什么我得到 #NAME? 错误?
答:这是由于服务无法访问 Excel 文件或刷新计算。 -
Windows 服务可以访问 Excel 吗?
答:是的,使用 Microsoft.Office.Interop.Excel 程序集。 -
如何在服务中使用 Microsoft.Office.Interop.Excel 程序集?
答:查看代码示例。 -
如何授予服务对 Excel 文件的访问权限?
答:确保服务标识具有适当的权限。 -
我需要什么才能使用本文中的解决方案?
答:Visual Studio、Microsoft.Office.Interop.Excel 程序集和 Windows 服务经验。