将 excel 列作为文本读取

Posted

技术标签:

【中文标题】将 excel 列作为文本读取【英文标题】:Read excel columns as text 【发布时间】:2012-06-26 03:39:28 【问题描述】:

我只想从 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。

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

任何帮助将不胜感激。

【问题讨论】:

所以你的连接有效吗?您遇到的问题是读取数据?如果是这样,您能否发布一些从 excel 文件中提取数据的代码 @astroboy:是的,连接字符串有效,数据已加载到数据表中。但是对于某些值,null。有一列具有数值。如果我在该列的任何单元格中放置了一个文本值,则它被视为 null。 【参考方案1】:

我想这就是你在ACE work around之后的样子

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access 连接 引擎\引擎\Excel

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

在注册表中将 TypeGuessRows 设置为 0 并将 ImportMixedTypes 设置为 Text 后,您应该会得到预期的行为。


或者您可以使用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());
                
            

        

    

代码取自read excel file via interop

【讨论】:

还有其他解决方法吗?我们无法更改注册表值,因为生产服务器中托管了多个应用程序。

以上是关于将 excel 列作为文本读取的主要内容,如果未能解决你的问题,请参考以下文章

为啥 R 将 UTF-8 标头作为文本读取?

java读取excel文件,怎么取日期列?

pandas从excel读取数据数字类型过长出现科学计数法的问题

hutool读取excel怎么限制大小

Python:当文件在列标题中有特殊字符时,使用 Pandas 读取 Excel 文件

java poi读取excel含小数列时,与excel显示不一样