demo:https://files.cnblogs.com/files/guxingy/Excel%E8%BD%AC%E6%8D%A2%E4%B8%BAJson%E5%AF%B9%E8%B1%A1.rar

不太会用博客

待转换的Excel格式

转换后的JSON格式:

Excel转换类:

public class OperationExcel
{
/// <summary>
/// Excel 转换为 Datatable
/// </summary>
/// <param name="sheetNum">工作表索引</param>
/// <param name="isFirstRowColumn">首行为列</param>
/// <param name="fileName">Excel文件路径</param>
/// <returns></returns>
public DataTable ExcelToDataTable(int sheetNum, bool isFirstRowColumn, string fileName)
{
IWorkbook workbook = null;
ISheet sheet = null;
DataTable myTable = new DataTable();
try
{
var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
if (fileName.IndexOf(".xlsx") > )
workbook = new XSSFWorkbook(fs);
else if (fileName.IndexOf(".xls") > )
workbook = new HSSFWorkbook(fs);
sheet = workbook.GetSheetAt(sheetNum); //工作表不能为空
if (sheet == null)
{
string str = "";
for (int i = ; i < workbook.NumberOfSheets; i++)
{
str += workbook.GetSheetAt(i).SheetName + ",";
}
str = workbook.NumberOfSheets + str;
throw new Exception($"sheet不能为空!参数:{sheetNum} 工作簿信息:{str}");
} //Excel最大列数
int MaxColumnNum = ;
for (int i = ; i < sheet.LastRowNum; i++)
{
var row = sheet.GetRow(i);
if (row.LastCellNum > MaxColumnNum)
{
MaxColumnNum = row.LastCellNum;
}
}
//Excel行数
int MaxRowNum = sheet.LastRowNum; //table新增列
for (int i = ; i < MaxColumnNum; ++i)
{
//首行为列
if (isFirstRowColumn)
{
bool addEmptyCell = true;//是否添加空列
ICell cell = sheet.GetRow().GetCell(i);
if (cell != null)
{
//table列赋值
string cellValue = "";//列名
if (cell.CellType == CellType.Numeric)
{
cellValue = cell.NumericCellValue.ToString();
}
else
{
cellValue = cell.StringCellValue;
}
if (!string.IsNullOrWhiteSpace(cellValue))
{
//列数据为Excel的数据
addEmptyCell = false;
myTable.Columns.Add(new DataColumn(cellValue));
}
}
if (addEmptyCell)
{
myTable.Columns.Add(new DataColumn(""));//列数据为空
}
}
else
{
myTable.Columns.Add(new DataColumn(i + ""));
}
} //起始行
int startRow = ;
if (isFirstRowColumn)
{
startRow = ;
} //DataTable赋值
for (int i = startRow; i <= MaxRowNum; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; DataRow NewRow = myTable.NewRow();
for (int j = row.FirstCellNum; j < row.LastCellNum; ++j)
{
ICell cell = row.GetCell(j);
string value = "";
if (cell != null)
{
//table行赋值
if (cell.CellType == CellType.Numeric)
{
value = cell.NumericCellValue.ToString();
if ((j == ) && ((i == ) || (i == )))
{
//特殊的几个单元格 转换为 日期格式
value = ToDateTimeValue(cell.NumericCellValue.ToString());
}
}
else
{
//row.GetCell(j).SetCellType(CellType.String);
value = cell.StringCellValue;
}
}
NewRow[j] = value;
}
myTable.Rows.Add(NewRow);
}
return myTable;
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// DataTable 转换为 Html
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public string GetHtmlString(DataTable dt)
{
StringBuilder sb = new StringBuilder();
sb.Append("<html><head>");
sb.Append("<title>Excel转换为Table</title>");
sb.Append("<meta http-equiv='content-type' content='text/html; charset=GB2312'> ");
sb.Append("<style type=text/css>");
sb.Append("td{font-size: 9pt;border:solid 1 #000000;}");
sb.Append("table{padding:3 0 3 0;border:solid 1 #000000;margin:0 0 0 0;BORDER-COLLAPSE: collapse;}");
sb.Append("</style>");
sb.Append("</head>");
sb.Append("<body>");
sb.Append("<table cellSpacing='0' cellPadding='0' width ='100%' border='1'>");
sb.Append("<tr valign='middle'>");
sb.Append("<td><b></b></td>");
foreach (DataColumn column in dt.Columns)
{
sb.Append("<td><b><span>" + column.ColumnName + "</span></b></td>");
}
sb.Append("</tr>");
int iColsCount = dt.Columns.Count;
int rowsCount = dt.Rows.Count - ;
for (int j = ; j <= rowsCount; j++)
{
sb.Append("<tr>");
sb.Append("<td>" + ((int)(j + )).ToString() + "</td>");
for (int k = ; k <= iColsCount - ; k++)
{
sb.Append("<td>");
object obj = dt.Rows[j][k];
if (obj == DBNull.Value)
{
obj = "&nbsp;";//如果是NULL则在HTML里面使用一个空格替换之
}
if (obj.ToString() == "")
{
obj = "&nbsp;";
}
string strCellContent = obj.ToString().Trim();
sb.Append("<span>" + strCellContent + "</span>");
sb.Append("</td>");
}
sb.Append("</tr>");
}
sb.Append("</table>"); //点击单元格 输出 行和列
sb.Append("<script src='https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js'></script>");
sb.Append("<script type='text/javascript'>");
sb.Append("$('table tbody').on('click', 'td', function (e) {");
sb.Append("var row = $(this).parent().prevAll().length-1 ;");
sb.Append("var column = $(this).prevAll().length-1 ;");
sb.Append("var str = 'dt.Rows[' + row + '][' + column + '].ToString()';");
sb.Append("console.log(str);alert(str);");
sb.Append("});");
sb.Append("</script>"); sb.Append("</body></html>");
return sb.ToString();
} /// <summary>
/// 数字格式的时间 转换为 字符串格式的时间
/// 数字格式的时间 如: 42095.7069444444/0.650694444444444
/// </summary>
/// <param name="timeStr">数字,如:42095.7069444444/0.650694444444444</param>
/// <returns>日期/时间格式</returns>
public string ToDateTimeValue(string strNumber)
{
if (!string.IsNullOrWhiteSpace(strNumber))
{
Decimal tempValue;
//先检查 是不是数字;
if (Decimal.TryParse(strNumber, out tempValue))
{
//天数,取整
int day = Convert.ToInt32(Math.Truncate(tempValue));
//这里也不知道为什么. 如果是小于32,则减1,否则减2
//日期从1900-01-01开始累加
// day = day < 32 ? day - 1 : day - 2;
DateTime dt = new DateTime(, , ).AddDays(day < ? (day - ) : (day - )); //小时:减掉天数,这个数字转换小时:(* 24)
Decimal hourTemp = (tempValue - day) * ;//获取小时数
//取整.小时数
int hour = Convert.ToInt32(Math.Truncate(hourTemp));
//分钟:减掉小时,( * 60)
//这里舍入,否则取值会有1分钟误差.
Decimal minuteTemp = Math.Round((hourTemp - hour) * , );//获取分钟数
int minute = Convert.ToInt32(Math.Truncate(minuteTemp));
//秒:减掉分钟,( * 60)
//这里舍入,否则取值会有1秒误差.
Decimal secondTemp = Math.Round((minuteTemp - minute) * , );//获取秒数
int second = Convert.ToInt32(Math.Truncate(secondTemp)); //时间格式:00:00:00
string resultTimes = string.Format("{0}:{1}:{2}",
(hour < ? ("" + hour) : hour.ToString()),
(minute < ? ("" + minute) : minute.ToString()),
(second < ? ("" + second) : second.ToString())); if (day > )
return string.Format("{0} {1}", dt.ToString("yyyy-MM-dd"), resultTimes);
else
return resultTimes;
}
}
return string.Empty;
}
}

转换的方法

/// <summary>
/// excel 转换为 datatable
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
OperationExcel _OperationExcel = new OperationExcel();
DataTable dt = _OperationExcel.ExcelToDataTable(, true, "21.xls");
} /// <summary>
/// datatable 转换为 html
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
OperationExcel _OperationExcel = new OperationExcel();
DataTable dt = _OperationExcel.ExcelToDataTable(, true, "21.xls");
textBox1.Text = _OperationExcel.GetHtmlString(dt);
} /// <summary>
/// datatable 转换为 json格式
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
OperationExcel _OperationExcel = new OperationExcel();
List<ExcelInfo> list = new List<ExcelInfo>();
list.Add(new ExcelInfo("21.xls", ));
list.Add(new ExcelInfo("22.xls", ));
list.Add(new ExcelInfo("23.xls", ));
list.ForEach(c =>
{
for (int i = ; i < c.SheetCount; i++)
{
DataTable dt = _OperationExcel.ExcelToDataTable(i, true, c.FileName);
string str = CreateStrObj(dt);
string num = c.FileName.Replace(".xls", "");
string fileName = $"Y{num}-{i + 1}.txt";
System.IO.File.WriteAllText($"txt//{fileName}", str);
}
});
MessageBox.Show("格式转换完成!");
} public string CreateStrObj(DataTable dt)
{
ZLInfo _ZLInfo = new ZLInfo(); //基本信息
_ZLInfo._桥梁名称 = dt.Rows[][].ToString();
_ZLInfo._构建类型 = dt.Rows[][].ToString();
_ZLInfo._构件编号 = dt.Rows[][].ToString();
_ZLInfo._张拉方式 = dt.Rows[][].ToString();
_ZLInfo._张拉日期 = "";
_ZLInfo._砼设计强度 = dt.Rows[][].ToString(); //详情数据
List<DetailInfor> list = new List<DetailInfor>();
int total = ;
for (int i = ; i < total; i++)
{
DetailInfor _DetailInfor = new DetailInfor();
_DetailInfor._孔道号 = dt.Rows[i * + ][].ToString();
_DetailInfor._张拉时间 = dt.Rows[][].ToString();
_DetailInfor._理论伸长量 = dt.Rows[][].ToString();
_DetailInfor._设计张力 = dt.Rows[][].ToString();
_DetailInfor._回缩量 = dt.Rows[][].ToString();
_DetailInfor._张拉力 = "";
_DetailInfor._油压 = dt.Rows[][].ToString();
_DetailInfor._伸长量 = "";
_DetailInfor._伸长量误差 = ""; _DetailInfor._千斤顶编号1 = dt.Rows[][].ToString();
_DetailInfor._初始油压1 = dt.Rows[][].ToString();
_DetailInfor._初始张拉力1 = dt.Rows[][].ToString();
_DetailInfor._初始伸长量1 = dt.Rows[][].ToString();
_DetailInfor._2倍初始油压1 = dt.Rows[][].ToString();
_DetailInfor._2倍初始张拉力1 = dt.Rows[][].ToString();
_DetailInfor._2倍初始伸长量1 = dt.Rows[][].ToString();
_DetailInfor._100油压1 = dt.Rows[][].ToString();
_DetailInfor._100张拉力1 = dt.Rows[][].ToString();
_DetailInfor._100伸长量1 = dt.Rows[][].ToString(); _DetailInfor._千斤顶编号2 = dt.Rows[][].ToString();
_DetailInfor._初始油压2 = dt.Rows[][].ToString();
_DetailInfor._初始张拉力2 = dt.Rows[][].ToString();
_DetailInfor._初始伸长量2 = dt.Rows[][].ToString();
_DetailInfor._2倍初始油压2 = dt.Rows[][].ToString();
_DetailInfor._2倍初始张拉力2 = dt.Rows[][].ToString();
_DetailInfor._2倍初始伸长量2 = dt.Rows[][].ToString();
_DetailInfor._100油压2 = dt.Rows[][].ToString();
_DetailInfor._100张拉力2 = dt.Rows[][].ToString();
_DetailInfor._100伸长量2 = dt.Rows[][].ToString();
_DetailInfor._是否合格 = "";
list.Add(_DetailInfor);
}
_ZLInfo._详情数据 = list; string str = JsonConvert.SerializeObject(_ZLInfo); str = str.Replace("_", "");
str = str.Replace("100油压", "100%油压").Replace("100张拉力", "100%张拉力").Replace("100伸长量", "100%伸长量"); return str;
}

相关的类

public class ExcelInfo
{
public string FileName { get; set; }
public int SheetCount { get; set; }
public ExcelInfo(string FileName, int SheetCount)
{
this.FileName = FileName;
this.SheetCount = SheetCount;
}
}
public class ZLInfo
{
public string _桥梁名称 { get; set; }
public string _构建类型 { get; set; }
public string _构件编号 { get; set; }
public string _张拉方式 { get; set; }
public string _张拉日期 { get; set; }
public string _砼设计强度 { get; set; }
public List<DetailInfor> _详情数据 { get; set; }
}
public class DetailInfor
{
public string _孔道号 { get; set; }
public string _张拉时间 { get; set; }
public string _理论伸长量 { get; set; }
public string _设计张力 { get; set; }
public string _回缩量 { get; set; }
public string _张拉力 { get; set; }
public string _油压 { get; set; }
public string _伸长量 { get; set; }
public string _伸长量误差 { get; set; }
public string _千斤顶编号1 { get; set; }
public string _初始油压1 { get; set; }
public string _初始张拉力1 { get; set; }
public string _初始伸长量1 { get; set; }
public string _2倍初始油压1 { get; set; }
public string _2倍初始张拉力1 { get; set; }
public string _2倍初始伸长量1 { get; set; }
public string _100油压1 { get; set; }
public string _100张拉力1 { get; set; }
public string _100伸长量1 { get; set; }
public string _千斤顶编号2 { get; set; }
public string _初始油压2 { get; set; }
public string _初始张拉力2 { get; set; }
public string _初始伸长量2 { get; set; }
public string _2倍初始油压2 { get; set; }
public string _2倍初始张拉力2 { get; set; }
public string _2倍初始伸长量2 { get; set; }
public string _100油压2 { get; set; }
public string _100张拉力2 { get; set; }
public string _100伸长量2 { get; set; }
public string _是否合格 { get; set; }
}

C# Excel转换为Json的更多相关文章

  1. 使用node.js将xmind导出的excel转换为json树

    xmind文件如图所示, 最终生成的数据结构如图  2,选择导出为excel文件,导出的excel文件打开如图 3,安装node读取excel模块 cnpm i  node-xlsx --save 4 ...

  2. js压缩xml字符串,将xml字符串转换为xml对象,将xml对象转换为json对象

    /** * 压缩xml字符串 */ function compressXmlStr(str){ var prefix, suffix; var i = str.indexOf("\r&quo ...

  3. excel转json工具的制作(C#语言)

    最近在做一个火炬之光的技能系统的demo,需要用到配置表工具. &在网上没有找到让自己满意的工具&自己感兴趣, so自己做了一个. 我使用的C#语言,用了网上的SimpleJSON工具 ...

  4. 数据集转换为Json

    数据集转换为Json 第一步:新建一个类对象  通常我会写三个属性:状态.返回信息.数据集 第二步:新建一个JSON转换类 第三步:把类对象当做参数传入JSON转换类 ———————————————— ...

  5. JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  6. 【荐】使用eval()、new Function()将JSON字符串转换为JSON对象

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用j ...

  7. Excel转Json,Json转CSharp

    一份给策划最好的礼物!就是:Excel2Json2CSharp 策划配置Excel,动不动就要改数值啊,增加字段啊. 程序这边对应的解析类就得改动啊.整一个麻烦了得! 所以我就整理了这个Excel2J ...

  8. js 将json字符串转换为json对象的方法解析

    推荐: var obj = eval('(' + str + ')'); var last=JSON.stringify(obj); //将JSON对象转化为string字符 例如: JSON字符串: ...

  9. javaScript 将json字符串转换为json对象的方法解析

    JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对 ...

随机推荐

  1. Solr Date类型的哪些你不得不了解的细节

    我们先来看看Solr日期类型的一些内幕,然后讨论一下Solr日期类型存在的一些问题,最后我们看看怎么解决现存的问题.概述 DateField 在Solr4.x之前,我们只有DateField,这类型现 ...

  2. python基础易错总结

    1.python安装配置环境变量 [右键计算机]------->[属性]------->[高级系统设置]------->[高级]------->[环境变量]--------&g ...

  3. mac python3安装virtualenv出现的问题

    pip3 install virtualenv pip3 install virtualenvwrapper 安装成功后可能 找不到该命令, 解决办法 1.在 vim ~/.bashrc export ...

  4. [Lua]string与中文

    参考链接: https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81/8446880?fr=aladdin#7 http:// ...

  5. C# 反射常见用法

    定义: 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对 ...

  6. PHP 扩展在 Linux(centos7)系统下的编译与安装 以 mysqli 为例

    (操作系统 Centos7,环境版本 php7) 01,进入到 PHP 解压后的源码包的的 ext 文件夹 02,查看是否存在 mysqli 扩展 => ls, 如果不存在需要去响应网站下载 ( ...

  7. jgGrid pivot reload重新加载及刷新数据

    1.当使用jqGrid进行多维表时,reload方法会不停的重复增加标题的行数. 解决办法:直接删除jqGrid,重新初始化页面. function query(){//crossTable pivo ...

  8. 查看进程中的socket状态和数量

    程序运行时查看,结果是这样子的 C:\Users\Administrator>netstat -ano|findstr TCP TIME_WAIT TCP TIME_WAIT TCP TIME_ ...

  9. TFDStoredProc执行sql server的部分存储过程报错,有的是好的。

    TFDStoredProc执行sql server的部分存储过程报错,有的是好的. Invalid character value for cast specification 暂时无解.用fdque ...

  10. 02-body标签中相关标签-1

    主要内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup>.<sub> ...