0

我只想从 web 应用程序中的 excel 文件中读取所有列作为文本值,而不管数据的类型(日期、数字等)。

请查看使用的连接字符串。仅安装了 ACE 驱动程序,我们不能在生产服务器中使用任何其他驱动程序。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;
                             Extended Properties="Excel 12.0;HDR=YES;IMEX=1";

设置IMEX=1不起作用。它为某些值返回 null。

我可以看到很多文章,但我看不到正确的答案。

任何帮助,将不胜感激。

4

1 回答 1

3

我认为这就是你在ACE 工作之后的样子

不幸的是,您不能从连接字符串中设置 ImportMixedTypes 或 TypeGuessRows,因为这些设置是在注册表中定义的。对于ACE OleDb 驱动程序,它们存储在

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

在注册表中。因此,您可以简化连接字符串以摆脱其中一些扩展属性。

在注册表中设置TypeGuessRows为 0 和ImportMixedTypesText 后,您应该会得到您期望的行为。


或者您可以使用Microsoft.Office.Interop.Excel来读取文件。示例代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelTut
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/C.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;

            int rowCount = xlRange.Rows.Count;
            int colCount = xlRange.Columns.Count;

            for (int i = 1; i <= rowCount; i++)
            {
                for (int j = 1; j <= colCount; j++)
                {
                    MessageBox.Show(xlRange.Cells[i, j].Value2.ToString());
                }
            }

        }

    }
}

通过互操作从读取的 excel 文件中获取的代码

于 2012-06-26T04:21:17.453 回答