求教NPOI的高手,C#用NPOI导出Excel出现乱码
T_Customer[]customer=T_CustomerBLL.GetAll();HSSFWorkbookworkbook=newHSSFWorkbook();IS...
T_Customer[] customer = T_CustomerBLL.GetAll();
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("客户信息(" + DateTime.Now.ToString("yyyy-MM-dd") + ")");
IRow headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0, CellType.String).SetCellValue("姓名");
headerRow.CreateCell(1, CellType.String).SetCellValue("电话");
headerRow.CreateCell(2, CellType.String).SetCellValue("手机");
headerRow.CreateCell(3, CellType.String).SetCellValue("邮编");
headerRow.CreateCell(4, CellType.String).SetCellValue("地址");
headerRow.CreateCell(5, CellType.String).SetCellValue("门店编号");
headerRow.CreateCell(6, CellType.String).SetCellValue("购买日期");
表头直接用字符串的就会乱码,还有sheet的名称直接用字符串也会乱码
for (int i = 0; i < customer.Length; i++)
{
IRow row = sheet.CreateRow(i + 1);
row.CreateCell(0, CellType.String).SetCellValue(customer[i].c_Name);
row.CreateCell(1, CellType.String).SetCellValue(customer[i].c_TelPhone);
row.CreateCell(2, CellType.String).SetCellValue(customer[i].c_MobilePhone);
row.CreateCell(3, CellType.String).SetCellValue(customer[i].c_Post);
row.CreateCell(4, CellType.String).SetCellValue(customer[i].c_Address);
row.CreateCell(5, CellType.String).SetCellValue(customer[i].c_ShopNum);
row.CreateCell(6, CellType.String).SetCellValue(Convert.ToString( customer[i].c_BuyDate.ToString("yyyy-MM-dd")));
row.CreateCell(7, CellType.String).SetCellValue(customer[i].c_CarNum);
row.CreateCell(8, CellType.String).SetCellValue(customer[i].c_BracketNum);
row.CreateCell(9, CellType.String).SetCellValue(customer[i].c_Brand);
row.CreateCell(10, CellType.String).SetCellValue(customer[i].c_TypeNum);
row.CreateCell(11, CellType.String).SetCellValue(customer[i].c_Suggestion);
row.CreateCell(12, CellType.String).SetCellValue(customer[i].c_Remarks);
//设置自动列宽度
for (int t = 0; t < row.LastCellNum; t++)
{
sheet.AutoSizeColumn(t);
}
}
using (FileStream stream = File.OpenWrite(filePath))
{
workbook.Write(stream);
}
下面的在数据库查出来的数据在Excel里面就不会乱码
反正就是直接写用双引号括住的字符就会乱码。
这是怎么回事
我用的是NPOI binary 2.1.3.1 展开
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("客户信息(" + DateTime.Now.ToString("yyyy-MM-dd") + ")");
IRow headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0, CellType.String).SetCellValue("姓名");
headerRow.CreateCell(1, CellType.String).SetCellValue("电话");
headerRow.CreateCell(2, CellType.String).SetCellValue("手机");
headerRow.CreateCell(3, CellType.String).SetCellValue("邮编");
headerRow.CreateCell(4, CellType.String).SetCellValue("地址");
headerRow.CreateCell(5, CellType.String).SetCellValue("门店编号");
headerRow.CreateCell(6, CellType.String).SetCellValue("购买日期");
表头直接用字符串的就会乱码,还有sheet的名称直接用字符串也会乱码
for (int i = 0; i < customer.Length; i++)
{
IRow row = sheet.CreateRow(i + 1);
row.CreateCell(0, CellType.String).SetCellValue(customer[i].c_Name);
row.CreateCell(1, CellType.String).SetCellValue(customer[i].c_TelPhone);
row.CreateCell(2, CellType.String).SetCellValue(customer[i].c_MobilePhone);
row.CreateCell(3, CellType.String).SetCellValue(customer[i].c_Post);
row.CreateCell(4, CellType.String).SetCellValue(customer[i].c_Address);
row.CreateCell(5, CellType.String).SetCellValue(customer[i].c_ShopNum);
row.CreateCell(6, CellType.String).SetCellValue(Convert.ToString( customer[i].c_BuyDate.ToString("yyyy-MM-dd")));
row.CreateCell(7, CellType.String).SetCellValue(customer[i].c_CarNum);
row.CreateCell(8, CellType.String).SetCellValue(customer[i].c_BracketNum);
row.CreateCell(9, CellType.String).SetCellValue(customer[i].c_Brand);
row.CreateCell(10, CellType.String).SetCellValue(customer[i].c_TypeNum);
row.CreateCell(11, CellType.String).SetCellValue(customer[i].c_Suggestion);
row.CreateCell(12, CellType.String).SetCellValue(customer[i].c_Remarks);
//设置自动列宽度
for (int t = 0; t < row.LastCellNum; t++)
{
sheet.AutoSizeColumn(t);
}
}
using (FileStream stream = File.OpenWrite(filePath))
{
workbook.Write(stream);
}
下面的在数据库查出来的数据在Excel里面就不会乱码
反正就是直接写用双引号括住的字符就会乱码。
这是怎么回事
我用的是NPOI binary 2.1.3.1 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
4个回答
展开全部
字符编解码的问题吧。
这样试试:
string name = Encoding.UTF8.GetString(Encoding.Default.GetBytes("姓名"));
headerRow.CreateCell(0, CellType.String).SetCellValue(name);
追问
这是转utf8的吧,
但是还是乱码,只是跟之前的乱码不一样之前是
ÐÕÃû
现在是 ?DD 乱七八糟的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符编解码的问题吧。 这样试试: string name = Encoding.UTF8.GetString(Encoding.Default.GetBytes("姓名"));headerRow.CreateCell(0, CellType...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看看是不是这个声名的问题
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先排除是不是编码的原因,其次我遇到的情况是编码没问题,偶尔生成的文件会报“发现部分内容有问题”,有个弹出框,很不爽。据说是第三方工具生成的文件内容不规范原因。以下的方式成功解决了。
fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);用这种方式保存文件,现在问题解决了。
fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);用这种方式保存文件,现在问题解决了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询