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