返回

如何在 Windows 服务中将 XLSX 文件转换为 CSV 并解决 #NAME? 错误?

windows

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(); } } }

步骤:

  1. 使用 Microsoft.Office.Interop.Excel 程序集打开并计算 Excel 文件。
  2. 创建一个流写入器来写入 CSV 文件。
  3. 遍历工作表,逐行将单元格值写入 CSV 文件。
  4. 关闭工作簿、Excel 应用程序和 CSV 写入器。

注意事项:

  • 确保已安装 Microsoft Office Interop 程序集。
  • 授予服务对 Excel 文件的完全访问权限。
  • 使用具有足够文件系统访问权限的服务标识运行服务。

结论:

使用本文中的解决方案,你可以解决 Windows 服务中将 XLSX 转换为 CSV 时出现的 #NAME? 错误并允许服务访问 Excel 文件。

常见问题解答:

  1. 为什么我得到 #NAME? 错误?
    答:这是由于服务无法访问 Excel 文件或刷新计算。

  2. Windows 服务可以访问 Excel 吗?
    答:是的,使用 Microsoft.Office.Interop.Excel 程序集。

  3. 如何在服务中使用 Microsoft.Office.Interop.Excel 程序集?
    答:查看代码示例。

  4. 如何授予服务对 Excel 文件的访问权限?
    答:确保服务标识具有适当的权限。

  5. 我需要什么才能使用本文中的解决方案?
    答:Visual Studio、Microsoft.Office.Interop.Excel 程序集和 Windows 服务经验。