将Excel字节数组数据转换为Datatable C#API
要求客户端以字节数组的形式发送Excel数据(将为客户端提供相同的API链接) 现在,当API接收到字节数组时,我想将其转换为datatable以转换为XML 下面是我尝试过的代码将Excel字节数组数据转换为Datatable C#API,c#,.net,C#,.net,要求客户端以字节数组的形式发送Excel数据(将为客户端提供相同的API链接) 现在,当API接收到字节数组时,我想将其转换为datatable以转换为XML 下面是我尝试过的代码 public string ConvertExcelByteArraytoXML() { byte[] Excelbytes = null; FileStream fs = File.OpenRead("C:\\PRATAP FOLDER\\test
public string ConvertExcelByteArraytoXML()
{
byte[] Excelbytes = null;
FileStream fs = File.OpenRead("C:\\PRATAP FOLDER\\test.xlsx");
BinaryReader binaryReader = new BinaryReader(fs);
Excelbytes = binaryReader.ReadBytes((int)fs.Length);
string CreateXMLFILE = string.Empty;
// the above code was to get byte array from excel
DataSet tempDataSet = new DataSet();
DataTable dt;
// Deserializing into datatable
using (MemoryStream stream = new MemoryStream(Excelbytes))
{
BinaryFormatter bformatter = new BinaryFormatter();
dt = (DataTable)bformatter.Deserialize(stream);
}
// Adding DataTable into DataSet
tempDataSet.Tables.Add(dt);
using (StringWriter sw = new StringWriter())
{
dt.WriteXml(sw);
CreateXMLFILE = sw.ToString();
}
return CreateXMLFILE;
}
投掷错误
dt=(数据表)b格式。反序列化(流)代码>
{“输入流不是有效的二进制格式。起始内容
(以字节为单位)为:50-4B-03-04-14-00-06-00-08-00-00-00-21-00-EB-7A-D2
…“}
有人能告诉我这里做错了什么吗。正如我在评论中提到的,您可以尝试以下代码来转换字节数组 到数据表 代码:
根据我的测试,我可以重现你的问题。但是,我发现很难成功地将字节数组从excel转换为datatable。因为binaryformatter不知道datatable的结构。因此,我建议您可以直接将excel转换为datatable,而不是使用字节数组。是的,这是一种简单的方法。但是客户端正在发送字节数组格式。如果是这样,我建议您可以先将字节数组转换为excel文件。然后,您可以将excel文件转换为datatable。我不想将excel工作表保存在服务器/本地…正在寻找替代方法。使用这种方法,我已经使用IEXceldataReader编写了代码。如果您不想将excel工作表保存在服务器/本地,我建议您可以在使用后将其删除。
class Program
{
static void Main(string[] args)
{
byte[] b = File.ReadAllBytes("D:\\2.xlsx"); // you get from the client
File.WriteAllBytes("test.xlsx", b); //Create an hourly file
DataTable table = Exceltodatatable("test.xlsx"); // convert it to datatable
File.Delete("test.xlsx"); // delete the file
}
public static DataTable Exceltodatatable(string path)
{
DataTable dt = new DataTable();
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;MAXSCANROWS=0'";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
using (OleDbCommand comm = new OleDbCommand())
{
string sheetName = "sheet1";
comm.CommandText = "Select * from [" + sheetName + "$]";
comm.Connection = conn;
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = comm;
da.Fill(dt);
return dt;
}
}
}
}
}