C# 铸造Excel单元格

C# 铸造Excel单元格,c#,excel,C#,Excel,我想从Excel工作表生成SQL脚本,因此我需要知道所有单元格的类型 因此,我尝试从以下代码中的单元格中获取类型,并在文本框中显示结果 C#代码: excel表格: 每个单元格的结果: 现在我不确定这是否是唯一获得“正确”类型以将excel单元格值强制转换为确切的sql类型的方法,或者是否有更好的解决方案我不知道 有没有更好的方法来获取每个单元格的类型,或者我应该创建一个枚举或类似的东西,并映射每个可能的单元格格式 您将无法获取单元格的类型。如果要将excel工作表中的数据输入数据库,请尝试转

我想从Excel工作表生成SQL脚本,因此我需要知道所有单元格的类型

因此,我尝试从以下代码中的单元格中获取类型,并在文本框中显示结果

C#代码:

excel表格: 每个单元格的结果:

现在我不确定这是否是唯一获得“正确”类型以将excel单元格值强制转换为确切的sql类型的方法,或者是否有更好的解决方案我不知道


有没有更好的方法来获取每个单元格的类型,或者我应该创建一个枚举或类似的东西,并映射每个可能的单元格格式

您将无法获取单元格的类型。如果要将excel工作表中的数据输入数据库,请尝试转换为所需的SQL类型和fromat。尤其是对于datetime,这是强制性的,因为datetime格式取决于您的db设置。

对空单元格要小心。你必须在铸造前检查它们。在Office 2010和2013中,空单元格为空。在使用ToString()或类似的东西之前,您需要检查这一点,因为这会引发异常。另外,使用double时也要小心,例如使用“、”或“.”这取决于您在Ecxel中的设置。

实际上,数字格式不是单元格的类型。你想做什么?仅将excel工作表中的数据写入数据库?您不能将这些值强制转换为SqlTypes,但可以从中推断SqlTypes。@MarcelTheis:如果单元格A2可能是日期或日期时间,我需要检查sql表中已存在的列的格式是否相同,并创建“插入到”如果单元格是日期时间,则可以是:12.05.2016或05/12/2016或12.05.2016:07:00:31或其他形式。这不是你从numberformat得到的。在我看来,没有办法得到类型。您必须尝试将它们转换为表所需的sql类型。NULL将是一个空单元格。在使用弦或其他东西之前,请记住这一点。尝试强制转换空值时,ToString()将引发异常。顺便说一下,您还需要将datetime转换为db的datetime格式,因为有很多这样的格式。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using System.Windows.Forms;

namespace Export
{
    internal class ExcelWorker
    {
        Excel.Application _xlApp = new Excel.Application();
        Excel.Workbook _xlWorkBook;
        Excel.Range _range;
        object misValue = System.Reflection.Missing.Value;
        private void Show(string value) => MessageBox.Show(value);
        internal void ReadExcelFile(string path, string cell)
        {
            try
            {
                _xlWorkBook = OpenBook(_xlApp, path, false, true, false);
                Excel.Worksheet sheet = _xlWorkBook.Sheets["Sheet1"] as Excel.Worksheet;
                Show(string.Format("Cell {0} \n\n Cell Number Format {1}", cell, sheet.get_Range(cell).NumberFormat));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        private static Excel.Workbook OpenBook(Excel.Application excelInstance, string fileName, bool readOnly, bool editable,
        bool updateLinks)


 {
                Excel.Workbook book = excelInstance.Workbooks.Open(
                    fileName, updateLinks, readOnly,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, editable, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing);
                return book;
          }
    }
}