Word“消息筛选器显示应用程序正在使用中”

最近遇到这样一个问题,.Net生成Word当数据量过大时,会引发异常“消息筛选器显示应用程序正在使用中”,几十条数据没事。

后来发现原因是由于大量的拼写错误(Word会默认检查每个字的拼写嘛),Word弹出的对话框阻止了生成所以引发了异常。

解决方法仅需将Word的拼写检查取消,“文件”–>”选项”–>”校对”,将下图红框内的勾选取消即可。

消息筛选器显示应用程序正在使用中

也可在操作Word时添加如下代码,将拼写检查和显示拼写错误禁用。

Word.Document oDoc = new Word.Document();

oDoc.SpellingChecked=false;
oDoc.ShowSpellingErrors=false;

.Net XML 与 DataSet 相互转换

.Net 的XML与DataSet 相互转换代码模版:

public static DataSet ConvertXMLFileToDataSet(string xmlText)
{

StringReader stream = null;

     XmlTextReader reader = null;

     try

{

         DataSet xmlDS = new DataSet();

stream = new StringReader(xmlText);

reader = new XmlTextReader(stream);

xmlDS.ReadXml(reader);

reader.Close();

         return xmlDS;

}

     catch (System.Exception ex)

{

reader.Close();

}

}


public static string DataToXml(DataSet ds)

{

     if (ds != null && ds.Tables.Count > 0)

{

         MemoryStream ms = null;

         XmlTextWriter XmlWt = null;

         try

{

ms = new MemoryStream();
              
XmlWt = new XmlTextWriter(ms, Encoding.Unicode);

//获取ds中的数据

ds.WriteXml(XmlWt);

int count = (int)ms.Length;

byte[] temp = new byte[count];

ms.Seek(0, SeekOrigin.Begin);

ms.Read(temp, 0, count);

//返回Unicode编码的文本

UnicodeEncoding ucode = new UnicodeEncoding();

string returnValue = ucode.GetString(temp).Trim();

return returnValue;

}

catch (System.Exception ex)

{


}

finally

{

if (XmlWt != null)

{

XmlWt.Close();

ms.Close();

}

}

}

else
       
return “”;
        
}

 

 

 

.Net Chart 图形控件 生成统计曲线图

使用自带的Chart控件生成统计曲线图。

该控件需引用System.Web.DataVisualization。
以下示例代码:

//创建曲线图对象
System.Web.UI.DataVisualization.Charting.Chart Chart2 = new System.Web.UI.DataVisualization.Charting.Chart();

//设置宽高
Chart2.Width = 958;
Chart2.Height = 400;

//以图片形式输出。
Chart2.RenderType = System.Web.UI.DataVisualization.Charting.RenderType.ImageTag;

//设置标题对象,将标题对象添加到曲线图中。
Title title = new Title(startTime.ToString(“yyyy-MM-dd”) + “~” + endTime.ToString(“yyyy-MM-dd”) + “时间段的推广注册用户曲线图”);
Chart2.Titles.Add(title);
//绘图区域
Chart2.ChartAreas.Add(“series”);
Series series1 = new Series();
series1.Name = “注册人数曲线”;
//数据显示方式 Line:为折线 Spline:曲线
series1.ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Spline;
//线条颜色
series1.Color = Color.Green;
//线条宽度
series1.BorderWidth = 2;
//阴影宽度
series1.ShadowOffset = 1;
if (list.Count() <= 200)
{
series1.IsVisibleInLegend = true; //是否显示线条数据说明
series1.IsValueShownAsLabel = true; //线条上是否指定的数据
series1.MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
series1.MarkerSize = 8; // 标志的大小
series1.LabelForeColor = Color.Red;
}

//内存流
MemoryStream imageStream = new MemoryStream();
double totalNum = 0;
foreach (TongjiUser model in list)
{
//分别往X,Y轴添加数据(可以为多种类型) (有多中添加方式)
series1.Points.AddXY(model.Time.ToString(“yyyy-MM-dd”), model.Count);
totalNum += model.Count;
}
string strSarr = ” 总数:” + totalNum + ” 平均值:” + Math.Round(totalNum /((endTime-startTime).Days+1), 2) + “注册率:” + Math.Round(totalNum / newList.Count(), 4) * 100 + “%”;
series1.BorderColor = System.Drawing.Color.Gray;
series1.ChartArea = “series”;

Chart2.Series.Add(series1);

Chart2.ChartAreas[0].AxisY.Title = “注册人数曲线”;
Chart2.ChartAreas[0].AxisX.Title = strSarr;

////中间X,Y线条的颜色设置
//Chart2.ChartAreas[0].AxisX.LineDashStyle = ChartDashStyle.DashDotDot;
//Chart2.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Blue;

Chart2.Legends.Add(“Legend1”);
Chart2.SaveImage(imageStream, ChartImageFormat.Png);
imageStream.Position = 0;
return new FileStreamResult(imageStream, “image/png”);

}

注:X、Y轴所有的标注都显示需添加如下代码,默认为跳着显示。

Chart1.ChartAreas[0].AxisX.IntervalAutoMode =  IntervalAutoMode.VariableCount;
Chart1.ChartAreas[0].AxisX.LabelStyle.IsStaggered = true;

DataSet中DataTable添加行引发“该行已经属于另一个表”错误

示例:将dt1的数据复制到dt2中。

DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();

//将dt1的结构克隆给dt2
dt2 = dt1.Clone();
for (int i = 0; i < dt1.Rows.Count; i++)
{
DataRow dr = dt2.NewRow();
dr = dt1.Rows[i];
//此行将引发——DataTable添加行出现“该行已经属于另一个表”的错误
//dt2.Rows.Add(dr);
//换成这种写法是正确的或者可以直接使用dt2.Rows.Add(dt1.Rows[i].ItemArray);
dt2.Rows.Add(dr.ItemArray);
}